2013-08-30 61 views
0

在Scala中,我可以生成一個令行禁止功能,像這樣:秩序咖喱斯卡拉參數的功能

def multiply(m: Int)(n: Int): Int = (m + 1) * (n + 2) 

如果我想,我可以生成一個新的功能,通過填充的是第一個參數,像這樣:

val timesTwo = multiply(1) _ 

但是替換第二個參數而不是第一個參數的語法是什麼?

val timesThree = multiply _ (1) // Incorrect Syntax 

更重要的是,爲什麼沒有直接平行於multiply(1) _

回答

7
val timesThree = multiply(_: Int)(1) 

val timesThree = (x: Int) => multiply(x)(1) 
+0

我喜歡'乘法(_的:int)(1)'。謝謝!但爲什麼語法不會與'multiply(1)_'並行? – theJollySin

+2

請參閱Scala參考的6.7節(http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf)。 multiply(1)_中的_不是像multiply(_:Int)那樣的匿名函數參數的佔位符,而是強制方法轉換爲函數的特殊語法(「eta-expansion」) 。至於爲什麼需要顯式類型,我不知道。 – wingedsubmariner