如果设置了选项的值,我想执行一些逻辑。
来自java背景,我用过:
if (opt.nonEmpty) {
//something
}
再深入一点,我可以这样写:
opt.foreach(o => {
//something
})
哪一个更好? “foreach” 听起来更“惯用”,Java 更少,但可读性更差——应用于单个值的“foreach”听起来很奇怪。
最佳答案
您的示例不完整,并且您没有使用最少的语法。只需比较这两个版本:
if (opt.nonEmpty) {
val o = opt.get
// ...
}
// vs
opt foreach {
o => // ...
}
和
if (opt.nonEmpty)
doSomething(opt.get)
// vs
opt foreach doSomething
在这两个版本中,
if
中有更多的语法开销。解决方案,但我同意 foreach
在 Option
如果您仅将其视为可选值,可能会令人困惑。而是
foreach
描述你想做一些副作用,如果你想到 Option
就很有意义作为一个单子(monad)和foreach
只是一种改造它的方法。使用 foreach
此外,它还有一个很大的优势,那就是它使重构更容易——您只需将其类型更改为 List
或任何其他 monad,您将不会收到任何编译器错误(因为 Scalas 强大的集合库,您不受限于仅使用适用于 monad 的操作,在很多类型上定义了很多方法)。
关于scala - if (Option.nonEmpty) 与 Option.foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163828/