什麼是Scala中的函數文字,我應該在什麼時候使用它們?什麼是Scala中的函數文字?
回答
函數literal是定義函數的替代語法。當你想將一個函數作爲參數傳遞給一個方法時(特別是像摺疊或過濾器操作這樣的高階函數),但不想定義一個單獨的函數時,這非常有用。函數文字是匿名的 - 默認情況下它們沒有名稱,但是可以通過將它們綁定到變量來給它們起個名字。文字函數的定義,像這樣:
(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中其他類型的文字比較可能很有用。 Literals是的符號糖,代表語言認爲特別重要的某些類型的值。 Scala has整數文字,字符文字,字符串文字等Scala將函數視爲源代碼中函數文字表示的第一類值。這些函數值包含一個特殊的function type。例如,
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 => Int) = (x: Int) => x > two
List(one,two,three).filter(greaterThan2)
有沒有辦法讓類型更加明確?這個工作原理:'List(1,2,3).map(x => x + 10)' 這不起作用:'List(1,2,3).map((x:Int):Str = > x。toString)' 這個工作,但它不是很明確:'List(1,2,3).map((x:Int)=> x.toString)' 或者如果我想這樣做,我應該使用一個named功能? – monteiro 2018-01-21 19:16:50
@monteiro'List(1,2,3).map((x:Int)=> {x.toString}:String)' – 2018-01-22 11:33:03
非常感謝! :) – monteiro 2018-01-23 00:22:54
- 1. Scala中的應用函數是什麼?
- 2. scala中的函數和函數文字
- 3. 什麼是類型和什麼是類型構造函數scala
- 4. 將`Unit`傳遞給Scala中的函數的目的是什麼
- 5. 什麼是scala中的RNA?
- 6. Scala中的[A]是什麼?
- 7. Scala中class參數的val是什麼?
- 8. Scala中curried函數的基本原理是什麼?
- 9. 什麼是Scala中所有函數的超類型?
- 10. 爲什麼Scala中的匿名函數和函數是這樣構造的?
- 11. Scala中函數的平等是Scala中的函數對象嗎?
- 12. scala List的配套函數返回GenericCompanion的用例是什麼?
- 13. 在PHP中,文字與方法/函數的含義是什麼?
- 14. 什麼時候是一個scala部分函數而不是部分函數?
- 15. 爲什麼這個scala並置函數不是遞歸的?
- 16. Scala forSome關鍵字是什麼?
- 17. 什麼是Scala的類
- 18. 什麼是Scala中的「(x,y)」,實際返回的是什麼?
- 19. Scala中的Random.nextDouble的範圍是什麼?
- 20. 在Scala的函數文字中,鏈接=>(向右雙箭頭)運算符的含義是什麼?
- 21. Scala REPL中的當前類是什麼?
- 22. Scala中「new {}」的含義是什麼?
- 23. Scala中Long.toInt的語義是什麼?
- 24. 什麼是scala Stream中的#::運算符?
- 25. Scala中#::的含義是什麼?
- 26. 什麼是Scala中的盒裝錯誤?
- 27. Scala中的「底層類型」是什麼?
- 28. 是什麼意思:+ scala中的行?
- 29. param:_ *在Scala中的含義是什麼?
- 30. 「<:」在Scala中的含義是什麼?
我想這可能是有用指出文字的功能是怎麼過的功能N只是糖 - 這將提供一個總體良好的情況下的文字與「長」版本。另外,雖然我有+1,但它通常不是「定義函數的替代語法[你的意思是方法????]」,因爲***函數不是方法*** - 只構造方法*適用於可以派發給他們的類和消息(類)。 *函數*是「第一類值」(支持「apply」的對象和其他幾個)。 – 2011-03-09 04:21:29
def add =(a:Int,b:Int)=> a + b是不是一樣?我可以使用這個'add'來傳遞給另一個函數 – ses 2014-03-01 18:07:49
你也可以用一個現有的函數用underscope運算符創建一個函數literal: def addTwoNumbers(a:Int,b:Int)= a + b; def add2 = addTwoNumbers _ – Blitzkr1eg 2018-02-01 08:05:55