2013-08-30 63 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