The complete error message is error: not found: value abs
. The value "abs" wan't found. You want math.abs
. Alternatively you could add import math._
somewhere before you need these math functions.
scala - error: not found: value
-
24-06-2022 - |
题
I newly at scala and tried to pass some easy scala worksheet.
IDE is Intellij IDEA community edition and OS Ubuntu 12.04, sbt
was installed correctly.
But it throws error - error: not found: value
OI can't understand why this happen:
Code:
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)
}
Output from right side of screen:
> 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)
Any suggestions?
解决方案
其他提示
I had the same problem as you. I didn't think importing math.abs or importing math._ were valid as abs was defined in the code.
What worked for me was reorganizing the order of the function definitions. You have to define something above before it can be used below.
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)
}
Returned:
> 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
And some easiest way without redundant code:
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)
}
不隶属于 StackOverflow