我有幾個有關咖喱功能的問題。在這裏,我要求他們一個接一個斯卡拉咖喱功能相關的問題
1)http://twitter.github.com/scala_school/basics.html給出了一個curried函數的例子 - 我認爲這是一個函數定義,但事實上並非如此。 REPL根本不承認這是一個有效的陳述。
multiplyThenFilter { m: Int => m * 2 } { n: Int => n < 5}
2)爲什麼我們不能從部分參數化的方法定義函數?即以下定義出了什麼問題?
scala> def multiply(m: Int, n: Int): Int = m * n
multiply: (m: Int, n: Int)Int
scala> val timesTwo = multiply(2,_)
<console>:11: error: missing parameter type for expanded function ((x$1) => multiply(2, x$1))
val timesTwo = multiply(2,_)
^
3)爲什麼我們不能創建一個部分參數化的函數curry?即以下定義出了什麼問題?
scala> (multiply(_,_)).curried
res13: Int => (Int => Int) = <function1> // THIS IS OK
scala> (multiply(20,_)).curried
<console>:12: error: missing parameter type for expanded function ((x$1) => multiply(20, x$1))
(multiply(20,_)).curried
^
1)它是無效的,因爲它必須首先聲明。例如,像這樣:'def multiplyThenFilter(a:Int => Int)(b:Int => Boolean)= {List(1,2,3,4).map(a)。過濾器(b)}' –
1)multiplyThenFilter現在不見了。你是不是被它迷惑:-) –