Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:为选项中的None值执行匿名代码块_Scala - Fatal编程技术网

Scala:为选项中的None值执行匿名代码块

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

Option类有一个很好的方法
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(…)
。在这种情况下,模式匹配是一种更好的方法。