2013-08-18 32 views
13

Niedawno na scala i próbował przekazać kilka prostych arkuszy scala.scala - błąd: nie znaleziono: wartość

IDE to edycja społeczności Intellij IDEA i system operacyjny Ubuntu 12.04, sbt został zainstalowany poprawnie.

Ale to wyrzuca błąd - error: not found: value

OI nie może zrozumieć, dlaczego tak się stało:

Kod:

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

Wyjście z prawej strony ekranu:

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

Wszelkie sugestie?

Odpowiedz

15

Kompletny komunikat o błędzie to error: not found: value abs. Wartość "abs" została znaleziona. Chcesz math.abs. Alternatywnie możesz dodać gdzieś import math._, zanim będziesz potrzebować tych funkcji matematycznych.

+0

Dzięki, właśnie to, czego potrzebowałem. Z drugiej strony wolę importować tylko to, czego program potrzebuje, dla jasności, więc polecam użyć "import math.abs". –

0

A niektóre najprostszy sposób bez nadmiarowego kodu:

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

miałem ten sam problem jak ty. Nie sądziłem, że importowanie math.abs lub importowanie matematyki są ważne, ponieważ abs został zdefiniowany w kodzie.

To, co zadziałało, to reorganizacja kolejności definicji funkcji. Musisz zdefiniować coś powyżej, zanim będzie można go użyć poniżej.

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

Zwracany:

> 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 
Powiązane problemy