题 scala - 错误:未找到:值


我最近在scala并尝试传递一些简单的scala工作表。

IDE是Intellij IDEA社区版和OS Ubuntu 12.04, sbt 安装正确。

但它会引发错误 - error: not found: value

OI无法理解为什么会这样:

码:


14
2017-08-18 14:12


起源




答案:


完整的错误消息是 error: not found: value abs。找不到值“abs”。你要 math.abs。或者你可以添加 import math._ 在你需要这些数学函数之前的某个地方。


17
2017-08-18 14:25



谢谢,正是我需要的。另一方面,为了清晰起见,我更喜欢仅导入程序所需的内容,因此我建议使用“import math.abs”。 - Igor Rodriguez


我遇到了和你一样的问题。我不认为导入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

2
2018-04-09 17:30





还有一些没有多余代码的最简单方法:

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)
}

0
2017-08-18 15:07