因为它有两个用途。
首先,您可以使用=>来定义函数文字。
scala> val fun = (x: Double) => x * 2
fun: (Double) => Double = <function1>
scala> fun (2.5)
res0: Double = 5.0
这很容易。但这里的问题是,什么类型的fun
是?它是一个“以Double为参数并返回双精度的函数”,对吗?
那么我怎么能注释它的类型的乐趣?那是(Double) => (Double)
。那么,前面的例子可以改写为:
scala> val fun: Double => Double = (x: Double) => x * 2
fun: (Double) => Double = <function1>
scala> fun (2.5)
res1: Double = 5.0
好的,那么下面的代码是做什么的?
def twice(op: Double => Double, x: Double) = op(op(x))
那么,它会告诉你OP是(Double => Double)
,这意味着它需要一个函数,它接受一个双并返回一个双。
因此,您可以将之前的fun
函数传递给它的第一个参数。
scala> def twice(op: Double => Double, x: Double) = op(op(x))
twice: (op: (Double) => Double,x: Double)Double
scala> twice (fun, 10)
res2: Double = 40.0
这将是等同于fun
更换op
,并与10
替换x
,即fun(fun(10))
,其结果将是40
为什么你列举'Function'? (如'FunctionN','Function1'等) – corazza 2014-03-08 18:17:46
@jcora - FunctionN是Scala中的一个特征,Function1是表示具有1个参数的函数的特征类型 - 检出https://gleichmann.wordpress.com/2010/11/08/functional-scala-functions-as-objects-as-functions /和http://mikefroh.blogspot.co.uk/2011/12/intro-to-functional-programming-with.html – 2016-06-01 00:13:24