def f(x: Int)(y: Int) = x + y
和def f(x: Int) = (y: Int) => x + y
有什麼區別?多個參數列表和返回函數之間有什麼區別?
的REPL似乎不開心的時候我把前者與後者相同:
scala> def f(x: Int)(y: Int) = x + y
f: (x: Int)(y: Int)Int
scala> f(42)
<console>:9: error: missing arguments for method f;
follow this method with `_' if you want to treat it as a partially applied function
f(42)
^
scala> def f(x: Int) = (y: Int) => x + y
f: (x: Int)Int => Int
scala> f(42)
res2: Int => Int = <function1>
什麼確切的差別,當我應該使用哪種形式?
那麼,一個是帶有兩個參數的函數,另一個返回帶有一個參數的函數。沒有? –
我喜歡想到的方式是,第一種方法是有兩個一元參數返回一個'Int'(所以'f(0)'的結果仍然是一個方法'(y:Int)Int'),而後者是一個一元arglist返回一元函數'Int => Int'的方法。這就解釋了爲什麼只有前者抱怨缺少下劃線;在這種情況下'f(0)'不計算爲函數。 – Hugh