Tôi hơi run về các quy tắc khi bạn cần _
sau khi sử dụng phương thức này làm chức năng. Ví dụ: tại sao có sự khác biệt giữa Foo
's và Nil
' s ::
trong những điều sau đây?Tại sao và khi nào tôi cần phải làm theo tên phương thức với _?
def square(n: Int) = n * n
object Foo { def ::(f: Int => Int) = f(42) }
// ...
scala> Foo.::(square)
res2: Int = 1764
scala> Nil.::(square)
<console>:6: error: missing arguments for method square in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
Nil.::(square)
^
scala> Nil.::(square _)
res3: List[(Int) => Int] = List(<function1>)
Cảm ơn. Chỉ tìm thấy một phần của đặc tả ngôn ngữ Scala cho một số lý do cho "lý do", trong ghi chú thay đổi cho Scala 2.0: "Các quy tắc cho chuyển đổi ngầm của các phương thức thành các hàm (§6.25) đã được thắt chặt. như một giá trị luôn được chuyển đổi hoàn toàn thành một hàm, điều này có thể dẫn đến các kết quả không mong đợi khi các đối số phương thức bị bỏ qua. –