[英]Scala define function standard
以下是等效的:
scala> val f1 = {i: Int => i == 1}
f1: Int => Boolean = <function1>
scala> val f2 = (i: Int) => i == 1
f2: Int => Boolean = <function1>
我更熟悉前者(來自Groovy),但后一種形式更常見,AFAIK,是在Scala中定義函數的標准方法。
我應該忘記過去(Groovy)並采用第二種形式嗎? 第一種形式對我來說更自然,因為它看起來類似於Groovy / Ruby / Javascript定義閉包(函數)的方式
編輯
請參閱Zeiger在這個帖子中的答案,例如groovy / ruby / javascript closure {=>}
語法似乎比() =>
更自然,我認為兩者可以互換使用,具有相同的性能,傳遞能力等等。 唯一的區別是語法
我認為這是品味問題(scala styleguide推薦的第一個)。 前者允許您編寫多行(體內> 2行)函數:
val f1 = { i: Int =>
val j = i/2
j == 1
}
有時它很有用
實際上,兩個版本都是“完整”版本的簡化形式。
完整版:多個參數,多個語句。
scala> val f0 = { (x: Int, y: Int) => val rest = x % y; x / y + (if (rest > 0) 1 else 0) }
f0: (Int, Int) => Int = <function2>
“groovy”版本:一個參數,多個語句。
scala> val f1 = { x: Int => val square = x * x; square + x }
f1: Int => Int = <function1>
“scala”版本:多個參數,一個聲明。
scala> val f2 = (x: Int, y: Int) => x * y
f2: (Int, Int) => Int = <function2>
不存在具有單個參數和單個語句的版本,因為它在語法上不有效(即,語法不完全有效)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.