斯卡拉方法參數
回答
功能這是指定功能的一種方式。函數是將一個或多個參數作爲輸入並返回輸出的東西。您可以使用=>符號指定函數的一種方法。
s: String => s.length == 4 // a function that takes a String called s as input
// and returns a Boolean (true if the length of s is 4
// false otherwise)
在scala中,您可以使用像使用整數或字符串或任何其他類型的基本數據類型的函數。
您可以將它們分配給變量:
scala> val f = (s: String) => s.length==4 // assigning our function to f
f: String => Boolean = <function1>
scala> f("abcd") // ...and using it
res1: Boolean = true
,你可以將它們作爲參數,其它函數或方法:你說的remove方法
scala> val thrill = List("foo", "bar", "baz", "bazz")
thrill: List[java.lang.String] = List(foo, bar, baz, bazz)
scala> thrill.remove(s => s.length == 4)
warning: there were 1 deprecation warnings; re-run with -deprecation for detail
res2: List[java.lang.String] = List(foo, bar, baz)
這裏:「應用這個函數s => s.length == 4到列表中的每個元素,並刪除所有元素,其中該函數返回true「
順便說一下,請注意,remove已被棄用。建議的替代方案是filterNot
scala> thrill.filterNot(s => s.length == 4)
res3: List[java.lang.String] = List(foo, bar, baz)
表達
s => s.length == 4
表示一個函數,它採用一個字符串(我猜)和返回基於它是否具有長度爲4
val f = s => s.length == 4
println(f("five")) //prints "true"
println(f("six")) //prints "false"
的s =>
的布爾值部分只是聲明函數的參數名稱(在這種情況下,只有一個:s
)
這就是說「運行功能s => s.length == 4
在所有項目上的快感,並刪除任何地方的函數返回true。」從邏輯上講,該函數必須將thrill中包含的單個項目作爲參數,並且必須返回一個布爾值(true或false)。
scala語法s => ...表示lambda函數 - 一種簡寫函數,其中在許多情況下函數的參數和返回類型被推斷。例如,在這種情況下,編譯器足夠聰明,知道如果快感包含字符串,則s必須是字符串。同樣,它可以以靜態類型的方式確認返回值(s.length == 4)是一個布爾值,並且滿足布爾返回值的要求。
總之:把它看成定義爲boolean f(String s) { return s.length == 4; }
我相信所有的以下都是彼此相同(雖然我是斯卡拉福利局也隨時提供勘誤的內容)
thrill.remove((s:String) => s.length == 4)
thrill.remove(s => s.length == 4)
thrill.remove(_.length == 4)
這裏使用'return'錯誤(在REPL中嘗試它,你會得到'error:return outside method definition')。你可能會喜歡使用'Function1'特性來包含定義沒有糖的函數...... :) – 2012-02-24 21:59:53
thx,我稍後再嘗試FUnction1,現在我拿出了有問題的回報。我沒有在這裏安裝REPL,所以我在嘗試http://ideone.com/,它不起作用 - 現在我知道爲什麼 – 2012-02-24 22:22:23
- 1. 斯卡拉 - 參數方法和forSome
- 2. 斯卡拉類型參數
- 3. 斯卡拉隱含參數
- 4. 斯卡拉:在參數
- 5. 斯卡拉:=>參數
- 6. 斯卡拉:在impilicit參數
- 7. Omiting參數斯卡拉
- 8. 斯卡拉流方法TakeWhile
- 9. 斯卡拉 - 方法構造
- 10. 斯卡拉:通用方法
- 11. 斯卡拉unapply方法
- 12. 斯卡拉 - 方法優先
- 13. 分配方法斯卡拉
- 14. 斯卡拉調用Java方法與數組參數
- 15. 需要函數參數實現方法 - 斯卡拉
- 16. 斯卡拉請參閱類型參數
- 17. 斯卡拉類的方法與類實例作爲參數
- 18. 斯卡拉:調用方法/ on參數通配符
- 19. 斯卡拉 - 傳遞性狀類型作爲方法參數
- 20. 斯卡拉(簡易)懲戒默認方法參數
- 21. 斯卡拉錯誤執行抽象方法與類型參數
- 22. 斯卡拉類型界限的可變參數方法
- 23. 斯卡拉方法參數:選項的集合或默認值
- 24. 斯卡拉 - 隱方法參數不起作用
- 25. 具有過載的斯卡拉方法多個參數組
- 26. 斯卡拉特質及其方法參數化
- 27. 斯卡拉非法方法名稱?
- 28. 斯卡拉可變參數計數
- 29. 斯卡拉typeclass沒有函數參數
- 30. 斯卡拉FlatSpec參數化與斯波克參數化
真棒,謝謝: ) – LuckyLuke 2012-02-24 21:37:44
刪除不是一個函數,它是一種方法。這個區別在Scala中非常重要。 (例如函數是對象,方法不是。) – 2012-02-25 00:35:26
@JörgW Mittag yikes!你是對的!修復了我的答案,非常感謝您的接受! – 2012-02-25 14:46:13