我有一个案例类Foo
,其中有一个字段baz: Option[List[Bar]]
。
另外,我有一个功能 - def f(baz: List[Bar])
我需要将List[Bar]
传递给f()
。
最好的方法是什么?
答案 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