Là một phần của việc học Scala Tôi cố gắng thực hiện chức năng lật của Haskell (hàm có chữ ký (A => B => C) = > (B => A => C)) trong Scala - và thực hiện nó như một hàm (sử dụng val) và không phải là phương thức (sử dụng def).là có thể thực hiện lật dưới dạng hàm Scala (và không phải là phương pháp)
tôi có thể thực hiện nó như một phương pháp, ví dụ như sau:
def flip[A, B, C](f: (A, B) => C):((B, A) => C) = (b: B, a: A) => f(a, b)
val minus = (a: Int, b: Int) => a - b
val f = flip(minus)
println(f(3, 5))
Tuy nhiên, khi tôi cố gắng thực hiện nó như là một chức năng, nó không hoạt động:
val flip = (f: ((Any, Any) => Any)) => ((a: Any, b: Any) => f(b, a))
val minus = (a: Int, b: Int) => a - b
val f = flip(minus)
println(f(3, 5))
Khi tôi cố gắng biên dịch mã này, nó không thành công với thông báo này:
Error:(8, 18) type mismatch;
found : (Int, Int) => Int
required: (Any, Any) => Any
val f = flip(minus)
Tôi hiểu tại sao nó không thành công: Tôi cố gắng vượt qua (Int, Int) => Int trong đó (Bất kỳ, Bất kỳ) => Bất kỳ được mong đợi. Tuy nhiên, tôi không biết cách khắc phục vấn đề này. Có thể ở tất cả?
'def something' có thể không phải là một hàm, nhưng nó trả về một hàm, có gì sai với điều đó? – pedrofurla