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