习惯的方式如果没有返回假?

Nic*_*all 2 scala

我正在处理的java库,返回null错误.是否有一种惯用的说法:

val x:Option[T]

if(x.isEmpty)
 false
else
 x.get.isFooable()
Run Code Online (Sandbox Code Playgroud)

我看过Scala的答案:布尔到选项.那些接近我想要的,然后有更多惯用的方式:

x.isDefined && x.get.isFooable()
Run Code Online (Sandbox Code Playgroud)

Kri*_*ala 10

x.exists(_.isFooable) // Returns false if x is None
Run Code Online (Sandbox Code Playgroud)

如果您想要true作为默认值None,请使用x.forall


Yur*_*riy 5

处理选项的方法有很多种。最惯用的是对 Option 的提升计算:

val x = Option(true)
x map { if(_) 10 else 20 }
Run Code Online (Sandbox Code Playgroud)

如果您使用 Option[Boolean] 进行条件分支,则最可取的是模式匹配:

c match {
  case Some(true)  => println("True")
  case Some(false) => println("False")
  case None        => println("Undefined")
}
Run Code Online (Sandbox Code Playgroud)

而你的情况:

x.isDefined && x.get.isFooable()
Run Code Online (Sandbox Code Playgroud)

一点点清楚:

x map { _.isFooable } getOrElse false
Run Code Online (Sandbox Code Playgroud)

最后使用 ScalaOption实用程序方法:

x exists { _.isFooable }
Run Code Online (Sandbox Code Playgroud)

  • 或者更好的`x.fold(false)(_.isFooable)` (5认同)
  • 我在上面找到了 [Tony Morris Option Cheat Sheet](http://blog.tmorris.net/scalaoption-cheat-sheet/),`x.exists(_.isFooAble())`。 (2认同)