1
A
回答
4
是,但它不逃避的範圍,所以你不能在體內使用它,如果
if ({val data = true; data})
println("data was true")
的分配不會返回一個值,但可以改爲返回。更好地做類似
def test(data: Boolean) {
if (data) {/* data in scope */}
else {/* data in scope */}}
+0
從你的第一個示例代碼中,是否有可能在整個if區塊中使用'data'? – Ryan
+0
不幸的是,它只在大括號內部,如果你需要分配和測試然後在'if'的主體中使用,那麼看起來你應該聲明一個'var'(這需要一個拋棄分配)在包含'if'的外部範圍中。然而,使用'var's更重要的是能夠分配,測試然後在'if'條件部分的範圍中使用。 –
3
有一個很好的擴展功能,可以幫助你與你的情況和其他許多人。
implicit class AnyExtensions[A](val x: A) extends AnyVal {
def asSatisfying(p: A => Boolean): Option[A] =
if (p(x)) Some(x) else None
}
有它的範圍進口的,你可以做你的榜樣如下:你可以用下面的隱式轉換實現它
flag.asSatisfying(_).foreach(println)
有一些更好的用例爲它詳細解釋this answer。
該函數的主要優點是它可以讓您有效地消除引入中間變量的需要,從而使您能夠將任何「if-else」邏輯解決爲單行表達式。
相關問題
- 1. 斯卡拉與分配
- 2. 分配在斯卡拉
- 3. 分配方法斯卡拉
- 4. 斯卡拉MapN與條件
- 5. 分配給while循環的條件變量 - 斯卡拉
- 6. 斯卡拉:如果案件轉換
- 7. 斯卡拉宏分配解構功能
- 8. 斯卡拉:鑄造和分配
- 9. println在斯卡拉斯內拉
- 10. 斯卡拉通過與條件
- 11. 斯卡拉減少基於條件
- 12. 斯卡拉:for循環,直到條件
- 13. 差異斯卡拉類,特質和對象的內存分配
- 14. 斯卡拉匹配列表
- 15. 斯卡拉列表匹配
- 16. 斯卡拉匹配錯誤
- 17. 斯卡拉「匹配」幫助
- 18. 斯卡拉:匹配case類
- 19. 斯卡拉模式匹配
- 20. 斯卡拉 - 複雜的條件模式匹配
- 21. 帕斯卡 - 動態內存分配
- 22. 斯卡拉內部類
- 23. 斯卡拉內存使用
- 24. 斯卡拉lambda微積分
- 25. 星火/斯卡拉拆分
- 26. 斯卡拉Int分區
- 27. QR分解斯卡拉
- 28. 斯卡拉分析器?
- 29. 斯卡拉分區一組
- 30. 斯卡拉如果其他行爲
爲什麼要編寫這樣的代碼?在'if'的主體內部,'data'總是'true',那麼爲什麼你需要'val data'呢? – Jesper
更新了我的問題 – Ryan
現在還很不清楚,你試圖在這裏實現什麼。不要將'data'分配給'flag'的值,你可以使用標誌,這在範圍內。請澄清你想要做什麼。 – drexin