我偶尔会遇到以下模式,我基本上有一个PartialFunction[SomeType,AnotherType]
,并希望将其视为Function[SomeType,Option[AnotherType]
, eg:
def f(s:SomeType):Option[AnotherType] = s match {
case s1:SubType1 => Some(AnotherType(s1.whatever))
case s2:SubType2 => Some(AnotherType(s2.whatever))
case _ => None
}
有没有办法以避免默认情况并将结果包装在中的方式编写上述函数Some
它在哪里定义的?到目前为止我想出的最好的办法是:
def f(s:SomeType):Option[AnotherType] = pf.lift(s)
def pf:PartialFunction[SomeType,AnotherType] = {
case s1:SubType1 => AnotherType(s1.whatever)
case s2:SubType2 => AnotherType(s2.whatever)
}
有没有办法在不定义中间函数的情况下做到这一点?我已经尝试了以下各种方法,但还没有任何东西可以编译:
def f:Function[SomeType,Option[AnotherType]] = {
case s1:SubType1 => AnotherType(s1.whatever)
case s2:SubType2 => AnotherType(s2.whatever)
}.lift
condOpt
在对象 scala.PartialFunction 中。来自 scaladoc:
def onlyInt(v: Any): Option[Int] = condOpt(v) { case x: Int => x }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)