??
C#中的运算符的Scala等价物是什么?
例:
string result = value1 ?? value2 ?? value3 ?? String.Empty;
Run Code Online (Sandbox Code Playgroud)
Rex*_*err 10
您可以使用相同的语义编写自己的语义 - 这是由于从左到右评估而始终坚持相同类型的语义,但是可以将其更改为?:从右到左的评估,根据需要扩展类型:
class CoalesceNull[A <: AnyRef](a: A) { def ??(b: A) = if (a==null) b else a }
implicit def coalesce_anything[A <: AnyRef](a: A) = new CoalesceNull(a)
scala> (null:String) ?? (null:String) ?? "(default value)"
res0: String = (default value)
Run Code Online (Sandbox Code Playgroud)
但是这个运算符不存在的原因可能是Option
处理这种情况的首选方式以及处理不存在的值的许多类似情况:
scala> List((null:String),(null:String),"(default value)").flatMap(Option(_)).headOption
res72: Option[java.lang.String] = Some((default value))
Run Code Online (Sandbox Code Playgroud)
(如果你是确保至少有一个是不为空,你可以只使用head
;请注意,这样做是因为Option(null)
皈依None
和flatMap
收集只有一起Some(_)
条目.)
试试 getOrElse。我朋友建议。
归档时间: |
|
查看次数: |
3172 次 |
最近记录: |