包裹法与链法

时间:2018-11-11 00:34:56

标签: scala

假设我们有以下内容:

sealed trait Foo
case class FullFoo[A](foo: A) extends Foo
case object EmptyFoo extends Foo

def liftToFoo[A](opt: Option[A]): Foo = 
  opt.map(a => FullFoo(a)).getOrElse(EmptyFoo)

我们可以轻松做到:

liftToFoo(Some(123)) // FullFoo(123)
liftToFoo(None)      // EmptyFoo

但是我很好奇是否有某种“可链接的”方式来调用它(而不是像上面那样包装方法):

Some(123).someFunction(liftToFoo)  // FullFoo(123)

1 个答案:

答案 0 :(得分:2)

并不是您要找的东西,而是可能比您想要的东西更近。

Some(123).fold(EmptyFoo:Foo)(FullFoo(_))