簡體   English   中英

什么是 Scala 中的函數字面量?

[英]What is a function literal in Scala?

什么是 Scala 中的函數字面量,我應該什么時候使用它們?

函數文字是定義函數的另一種語法。 當您想將函數作為參數傳遞給方法(尤其是像折疊或過濾操作這樣的高階函數)但又不想定義單獨的函數時,它很有用。 函數文字是匿名的——默認情況下它們沒有名稱,但您可以通過將它們綁定到變量來為它們命名。 函數字面量定義如下:

(a:Int, b:Int) => a + b

您可以將它們綁定到變量:

val add = (a:Int, b:Int) => a + b
add(1, 2) // Result is 3

就像我之前說的,函數文字對於作為參數傳遞給高階函數很有用。 它們對於定義嵌套在其他函數中的單行函數或輔助函數也很有用。

A Tour of Scala為函數字面量(他們稱之為匿名函數)提供了很好的參考。

在 Scala 中將函數文字與其他類型的文字進行比較可能很有用。文字是表示語言認為特別重要的某些類型的符號糖。 Scala 有整數字面量、字符字面量、字符串字面量等。Scala 將函數視為可在源代碼中由函數字面量表示的第一類值。 這些函數值屬於一種特殊的函數類型 例如,

  • 5是表示Int類型值的整數文字
  • 'a'是表示Char類型值的字符文字
  • (x: Int) => x + 2是一個函數文字,表示Int => Int函數類型中的值

文字通常用作匿名值,也就是說,不首先將它們綁定到命名變量。 這有助於使程序更簡潔,並且適用於不打算重用文字的情況。 例如:

List(1,2,3).filter((x: Int) => x > 2)

對比

val one: Int = 1
val two: Int = 2
val three: Int = 3
val greaterThan2: Int => Boolean = (x: Int) => x > two
List(one,two,three).filter(greaterThan2)

Scala 編程,第三版

8.3 一流的功能

函數文字被編譯成一個類,在運行時實例化時是一個函數值。 [2] 因此,函數字面量和值之間的區別在於函數字面量存在於源代碼中,而函數值在運行時作為對象存在。 區別很像類(源代碼)和對象(運行時)之間的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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