2013-08-18 37 views
13

Tôi vừa mới ở scala và đã cố gắng để vượt qua một số bảng tính scala dễ dàng.scala - lỗi: không tìm thấy: giá trị

IDE là phiên bản cộng đồng Intellij IDEA và hệ điều hành Ubuntu 12.04, sbt được cài đặt chính xác.

Nhưng nó throws lỗi - error: not found: value

OI không thể hiểu tại sao điều này xảy ra:

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 từ phía bên phải của màn hình:

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

Bất kỳ đề xuất nào?

Trả lời

15

Thông báo lỗi hoàn chỉnh là error: not found: value abs. Không tìm thấy giá trị "abs". Bạn muốn math.abs. Hoặc bạn có thể thêm import math._ ở đâu đó trước khi bạn cần các hàm toán học này.

+0

Cảm ơn, chỉ là những gì tôi cần. Ở phía bên kia, tôi thích chỉ nhập những gì chương trình cần, để rõ ràng, vì vậy tôi khuyên bạn nên sử dụng "import math.abs". –

0

Và một số cách đơn giản nhất mà không cần mã dư thừa:

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

tôi đã có vấn đề tương tự như bạn. Tôi không nghĩ rằng việc nhập math.abs hoặc nhập math._ là hợp lệ vì abs được định nghĩa trong mã.

Điều gì đã hiệu quả đối với tôi là sắp xếp thứ tự các định nghĩa chức năng. Bạn phải định nghĩa một cái gì đó ở trên trước khi nó có thể được sử dụng dưới đây.

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

trả lại:

> 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 
Các vấn đề liên quan