代码之家  ›  专栏  ›  技术社区  ›  user451151

包裹法与链法

  •  0
  • user451151  · 技术社区  · 7 年前

    假设我们有以下几点:

    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 回复  |  直到 7 年前
        1
  •  2
  •   jwvh    7 年前

    这不完全是你想要的,但可能比你现有的要近一点。

    Some(123).fold(EmptyFoo:Foo)(FullFoo(_))
    
    推荐文章