【发布时间】:2018-02-19 23:17:09
【问题描述】:
作为学习 Scala 的一部分,我尝试实现 Haskell 的 flip 函数(带有签名的函数 (A => B => C) => (B => A => C )) 在 Scala 中 - 并将其实现为函数(使用 val)而不是方法(使用 def)。
我可以将它实现为一种方法,例如这样:
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))
但是,当我尝试将其实现为函数时,它不起作用:
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))
当我尝试编译此代码时,它会失败并显示以下消息:
Error:(8, 18) type mismatch;
found : (Int, Int) => Int
required: (Any, Any) => Any
val f = flip(minus)
我明白它为什么会失败:我尝试通过 (Int, Int) => Int 其中 (Any, Any) => Any 是预期的。但是,我不知道如何解决这个问题。有可能吗?
【问题讨论】:
-
def something可能不是一个函数,但它返回一个函数,这有什么问题?
标签: scala