从字符串初始化Scala的Option [String],以便某些值导致None

时间:2014-09-08 16:41:50

标签: scala

有没有更短的方法:

val accessControlAllowOrigin = c_dash.getString("access-control-allow-origin") match {
  case "" => None
  case x => Some(x)
}

这是在Typesafe配置值中读取,其中空字符串表示没有这样的配置(在Typesafe配置中,它包含所有值的良好方式,不会遗漏任何内容)。

是否有类似的东西:

val sopt = Option( s, "magic" )

..如果Some(s)的值为None,会提供s"magic"吗?

通过查看我来的doc

scala> def f(s: String) = (Some(s) filter( _ != "magic" ))
f: (s: String)Option[String]

scala> f("aaa")
res1: Option[String] = Some(aaa)

scala> f("magic")
res2: Option[String] = None

这是最简单的吗?

2 个答案:

答案 0 :(得分:5)

您可以使用filterOption的工作方式与其他任何系列的工作方式相同:

c_dash.getString("access-control-allow-origin").filter(_.nonEmpty)

任何与filter谓词不匹配的内容都将变为None

答案 1 :(得分:2)

我可能会遗漏一些明显的东西,但是如何:

val sopt = if (s == "magic") None else Some(s)

或者,对于你的f():

def f(s:String) = if (s == "magic") None else Some(s)

或更一般地说:

def noneIfDefault(s:String, default: String) = if (s == default) None else Some(s)