Given:ứng dụng chức năng phần sớm chạy codeblock khi được sử dụng với gạch
def save(f: => Any)(run:Boolean) { if (run) { println("running f"); f } else println("not running f") }
tôi có thể gọi nó với:
save("test")(true) -> running f
save("test")(false) -> not running f
save(throw new RuntimeException("boom!"))(false) -> not running f
save(throw new RuntimeException("boom!"))(true) -> running f and then exception thrown
Đây là hành vi tò mò với ứng dụng phần:
save(throw new RuntimeException("boom!"))(_) -> (Boolean) => Unit = <function1> //as expected
save(throw new RuntimeException("boom!")) _ -> exception thrown
Khóa mã được đánh giá ngay lập tức mà không được chuyển thành một hàm. Sự khác nhau giữa 2 câu trên là gì?
Bạn có thể tìm thấy một số giải thích tại đây: http://stackoverflow.com/questions/2363013/in-scala-why-cant-i-partially-apply-a-function-without-explicitly-specifying-it –
IMHO, đây là một lỗi. –