Scala:为选项中的None值执行匿名代码块
Option类有一个很好的方法Scala:为选项中的None值执行匿名代码块,scala,Scala,Option类有一个很好的方法foreach,如果指定了值,它将调用传递的代码。Nonevalue是否有类似的技术?我知道.orElse方法,但使用它,我需要从代码块返回选项: x orElse { // do something None // <-- I want to avoid this line } x奥利斯{ //做点什么 None/我认为它不存在于标准选项库中,但您可以使用隐式类添加它 class OptionFunctions[T](val opt: Op
foreach
,如果指定了值,它将调用传递的代码。None
value是否有类似的技术?我知道.orElse
方法,但使用它,我需要从代码块返回选项
:
x orElse {
// do something
None // <-- I want to avoid this line
}
x奥利斯{
//做点什么
None/我认为它不存在于标准选项库中,但您可以使用隐式类添加它
class OptionFunctions[T](val opt: Option[T]) extends AnyVal {
def ifEmpty[A](f: => A): Unit = {
if (opt.isEmpty) f
}
}
然后像这样使用它:
val o = Some(1)
o.ifEmpty { println("empty") }
我不认为它存在于标准选项库中,但您可以使用隐式类添加它
class OptionFunctions[T](val opt: Option[T]) extends AnyVal {
def ifEmpty[A](f: => A): Unit = {
if (opt.isEmpty) f
}
}
然后像这样使用它:
val o = Some(1)
o.ifEmpty { println("empty") }
如果你想在None
的情况下做点什么,我假设你是在起副作用。那么,你怎么了:
if(o.isEmpty){
// do things
}
如果你想在None
的情况下做点什么,我假设你是在起副作用。那么,你怎么了:
if(o.isEmpty){
// do things
}
也许是模式匹配
option match {
case Some(foo) => println("Have " + foo)
case None => println("Have nothing.")
}
也许是模式匹配
option match {
case Some(foo) => println("Have " + foo)
case None => println("Have nothing.")
}
根据定义,选项旨在强制您管理“无”情况,因此您不应该避免None@sam,但我的问题是关于处理None
。根据定义,一个选项旨在强制您管理None情况,因此您应该无法避免None@sam,但我的问题是如何处理None
.Y是的,它会起作用。但我的问题更多的是关于正确的方法。例如,我可以简单地用if
语句检查isEmpty
。没有正确的方法,它的设计选择完全取决于您是的,它会起作用。但我的问题更多的是关于正确的方法。例如,我可以简单地用isEmpty
语句检查<代码>if
语句。没有合适的方法,这完全取决于您的设计选择。我想在没有结果的情况下做一些事情。例如,我只想在没有数据库结果的情况下执行api请求。为什么会产生副作用?这是副作用,因为您不返回值,因为您只对一种情况感兴趣(无
)。别担心。关键是这个库没有“nonefeach”,所以你最好只使用if(o.isEmpty)
。我想在没有结果的情况下做一些事情。例如,我只想在没有数据库结果的情况下执行api请求。为什么会产生副作用?这是副作用,因为您只对一种情况感兴趣(无),所以不返回值。不要担心。关键是库没有“noneForeach”所以最好只使用if(o.isEmpty)
。这是一个简单的解决方案,但我想编写更多的函数式代码。不确定“函数式代码”是什么意思“没错,但模式匹配是非常惯用的scala…我经常问自己与OP相同的问题,结果发现我确实在处理这两种情况,而不需要结果(例如,x.map(…).orElse(…)
。在这种情况下,模式匹配是一种更好的方法。这是一种简单的解决方案,但我想编写更多的函数样式代码。不确定“函数样式代码”是什么意思没错,但是模式匹配是非常惯用的scala…我经常问自己与OP相同的问题,只是意识到我确实在处理这两种情况而不需要结果(例如,x.map(…).orElse(…)
。在这种情况下,模式匹配是一种更好的方法。