2013-08-18 57 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