簡體   English   中英

Scala定義功能標准

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM