2013-08-18 15 views
13

मैं स्कैला में नया था और कुछ आसान स्कैला वर्कशीट पास करने की कोशिश की।स्कैला - त्रुटि: नहीं मिला: मूल्य

आईडीई इंटेलिज आईडीईए समुदाय संस्करण और ओएस उबंटू 12.04, sbt सही ढंग से स्थापित किया गया था।

लेकिन यह फेंकता त्रुटि - error: not found: value

OI नहीं समझ सकता वजह से ऐसा हो:

कोड: स्क्रीन के दाईं ओर से

object session { 
    1 + 2 
    def abs(x: Double) = if (x < 0) -x else x   <== update this line 
    def sqrtIter(guess: Double, x: Double): Double = 
    if (isGoodEnough(guess, x)) guess 
    else sqrtIter(improve(guess, x), x) 

    def isGoodEnough(guess: Double, x: Double) = 
    abs(guess * guess - x) < 0.001 

    def improve(guess: Double, x: Double) = 
    (guess + x/guess)/2 
    def sqrt(x: Double) = sqrtIter(1.0, x) 
    sqrt(2) 
    sqrt(4) 
} 

आउटपुट:

> res0: Int = 3 

> <console>:8: error: not found: value isGoodEnough 
      if (isGoodEnough(guess, x)) guess else sqrtIter(improve(guess, x), x) 
       ^
    <console>:8: error: not found: value improve 
      if (isGoodEnough(guess, x)) guess else sqrtIter(improve(guess, x), x) 
                  ^
> <console>:8: error: not found: value abs 
      abs(guess * guess - x) < 0.001 
      ^
> improve: (guess: Double, x: Double)Double 

> <console>:7: error: not found: value sqrtIter 
     def sqrt(x: Double) = sqrtIter(1.0, x) 
          ^ 
> <console>:8: error: not found: value sqrt 
       sqrt(2) 
       ^

> <console>:8: error: not found: value sqrt 
       sqrt(4) 

कोई सुझाव?

उत्तर

15

पूर्ण त्रुटि संदेश error: not found: value abs है। मूल्य "abs" नहीं मिला। आप math.abs चाहते हैं। वैकल्पिक रूप से आप इन गणित कार्यों की आवश्यकता से पहले कहीं भी import math._ जोड़ सकते हैं।

+0

धन्यवाद, मैं सिर्फ तुम क्या जरूरत है। दूसरी तरफ, मैं स्पष्टता के लिए प्रोग्राम को केवल वही आयात करना पसंद करता हूं, इसलिए मैं "आयात math.abs" का उपयोग करने की सलाह देता हूं। –

0

और अनावश्यक कोड के बिना कुछ सबसे आसान तरीका:

object session { 
    1 + 2 
    def abs(x: Double) = if (x < 0) -x else x 
    def sqrt(x: Double) = { 

    def sqrtIter(guess: Double): Double = 
    if (isGoodEnough(guess)) guess 
    else sqrtIter(improve(guess)) 

    def isGoodEnough(guess: Double) = 
    abs(guess * guess - x)/x < 0.001 

    def improve(guess: Double) = 
    (guess + x/guess)/2 
    sqrtIter(1.0) 
    } 
    sqrt(2) 
    sqrt(4) 
    sqrt(1e-16) 
    sqrt(1e60) 
} 
2

मैं तुम्हें रूप में एक ही समस्या थी। मैंने नहीं सोचा था कि math.abs आयात करना या math._ आयात करना मान्य था क्योंकि कोड में abs को परिभाषित किया गया था।

मेरे लिए क्या काम किया गया कार्य परिभाषाओं के क्रम को पुनर्गठित किया गया था। इसे नीचे इस्तेमाल किए जाने से पहले ऊपर कुछ परिभाषित करना होगा।

object session { 
    def abs(x: Double) = if (x<0) - x else x 

    def isGoodEnough(guess: Double, x: Double) = 
    abs(guess * guess - x) < 0.001 

    def improve(guess: Double, x: Double) = 
    (guess + x/guess)/2 
    def sqrtIter(guess: Double, x: Double): Double = 
    if(isGoodEnough(guess, x)) guess 
    else sqrtIter(improve(guess, x), x) 


    def sqrt(x: Double) = { sqrtIter(1.0, x) } 

    sqrt(2) 
    sqrt(4) 
} 

लौटाया गया:

> abs: (x: Double)Double 


> isGoodEnough: (guess: Double, x: Double)Boolean 


> improve: (guess: Double, x: Double)Double 


> sqrtIter: (guess: Double, x: Double)Double 


> sqrt: (x: Double)Double 



> res0: Double = 1.4142156862745097 
> res1: Double = 2.0000000929222947 
संबंधित मुद्दे