def foo(x:Int, f:Unit=>Int) = println(f())
foo(2, {Unit => 3+4}
//case1
def loop:Int = 7
foo(2, loop) //does not compile
changing loop to
//case 2
def loop():Int = 7
foo(2, loop) // does not compile
changing loop to
//case 3
def loop(x:Unit): Int = 7 //changing according to Don's Comments
foo(2,loop) // compiles and works fine
should'nt case 1 và case 2 cũng hoạt động? tại sao họ không làm việc?Chức năng không có đối số, với đơn vị làm đối số trong scala
định foo như
def foo(x:Int, y:()=>Int)
sau đó trường hợp 2 công trình nhưng không phải trường hợp 1.
Arent tất cả họ đều phải làm việc, quy định chức năng một trong hai cách.
// tôi cũng nghĩ() => Int in foo là kiểu xấu, y: => Int không hoạt động, bình luận ??
def định nghĩa các phương thức (không phải là lớp đầu tiên), không phải các hàm (mà * là * lớp đầu tiên). Ứng dụng một phần nâng cao các phương thức hoạt động khi bạn cần chúng. –
Bạn có thể vui lòng xây dựng .. Tôi đã không nhận được nó. Bạn có nghĩa là, rằng def của không thể được thông qua xung quanh. tức là "vòng lặp" ở trên không thể được chuyển cho các chức năng khác? – scout
Đúng. Khi chúng ta nói "lớp đầu tiên", chúng ta có nghĩa là cùng một trạng thái giống như bất kỳ giá trị nào khác như một Int, một String hoặc một thể hiện của một số lớp do người dùng định nghĩa. Các phương thức không thể được xử lý theo cách này (chúng chỉ có thể được gọi). Các hàm, mặt khác (là các cá thể của (các lớp con của) Hàm N (N là số đối số)), là các thực thể lớp đầu tiên vì lý do rõ ràng là chúng là các cá thể của một lớp. –