处理选项[A]其中函数将A作为参数

时间:2014-12-15 13:34:51

标签: scala

我有一个案例类Foo,其中有一个字段baz: Option[List[Bar]]

另外,我有一个功能 - def f(baz: List[Bar])

我需要将List[Bar]传递给f()

最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

选项很棒,因为它会强迫你在没有项目的情况下掌握。在List的情况下,Option可能过度,因为已存在相应的empty,即它们都是Monads:

f(myOptList getOrElse Nil)

其中我说你应该只有List。否则你会处理一个三元的情况:一些空的东西,一些有物品和空的东西。

答案 1 :(得分:2)

case class Baz(b: Int)
case class Foo(bazs: Option[List[Baz]])

val foo = Foo(Option(List(Baz(1), Baz(2))))
foo.bazs.map(list => f(list))

Option是一个monad,如果它是Some我们会应用它的地图,否则如果它是None则不会发生任何事情,来自REPL:

scala> def f(b: List[Baz]) = b.foreach(println)
f: (b: List[Baz])Unit

scala>     foo.bazs.map(list => f(list))
Baz(1)
Baz(2)
res1: Option[Unit] = Some(())

scala> val foo = Foo(None)
foo: Foo = Foo(None)

scala>     foo.bazs.map(list => f(list))
res2: Option[Unit] = None