了解isinstance

时间:2015-02-18 12:25:27

标签: scala for-comprehension

javaInterface会返回Objectnull

期望:Some(String)None

我怎样才能比

更好地写出来
for {
  o <- Option(javaInterface.getValue) if o.isInstanceOf[String] 
} 
yield o.asInstanceOf[String]

简单模式匹配不是选项monad的解决方案

for {
  a <- Option(javaInterface.getValue)
  o <- Option(a.getValue) if o.isInstanceOf[String] 
}
yield o.asInstanceOf[String]

2 个答案:

答案 0 :(得分:5)

您可以使用collect匹配类型:

for { 
    o <- Option(javaInterface.getValue).collect({case s: String => s})
} yield o

答案 1 :(得分:1)

等同于collect,请考虑filter,例如如下,

Option(javaInterface.getValue).filter { case s: String => s }