Scalaでは、カリー化された関数を他の関数に簡単に直接渡すことができるのはなぜですか?しかし、それをval
1つに割り当てるときは、部分的に適用する必要があります_
か?たとえば、次の2つの関数があります。
def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)
私は簡単に渡すことができcurried
ますtest
:
test(5, curried(5))
そして、すべてが幸せです。ただし、単に電話curried(5)
をかけると、エラーが発生します。
scala> curried(5)
<console>:9: error: missing arguments for method curried;
follow this method with `_' if you want to treat it as a partially applied function
curried(5)
ただし、タイプ情報を含めるように呼び出しを変更すると、機能します。
val 'curried: Int => Int = curried(5)
Int => Int
矛盾の背後にある理由を誰かが説明できますか?確かに、Scalaコンパイラーは、関数に元のメソッドの型定義が与えられていると推測できますか?