因爲它有兩個用途。
首先,您可以使用=>來定義函數文字。
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