2013-08-18 56 views
13

我新近在scala並試圖通過一些簡單的scala工作表。scala - 錯誤:未找到:值

IDE是Intellij IDEA社區版和OS Ubuntu 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

謝謝,正是我需要的。另一方面,爲了清晰起見,我更喜歡只導入程序需要的內容,所以我建議使用「import 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或導入數學是有效的,因爲在代碼中定義了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