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

Scala 处理选项[A],其中函数将A作为参数,scala,Scala,我有一个case类Foo,它有一个字段baz:Option[List[Bar]] 另外,我还有一个函数-def(baz:List[Bar]) 我需要将列表[Bar]传递到f() 最好的方法是什么 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)) 选项是一个单子,如果

我有一个case类
Foo
,它有一个字段
baz:Option[List[Bar]]

另外,我还有一个函数-
def(baz:List[Bar])

我需要将
列表[Bar]
传递到
f()

最好的方法是什么

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))
选项
是一个单子,如果它是
某些
我们将对其应用映射,否则如果它是
则从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
选项
是一个单子,如果它是
某些
我们将对其应用映射,否则如果它是
则从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

该选项很好,因为它会在没有项目时强制您使用夹点。在
列表
的情况下,
选项
可能是多余的,因为已经存在相应的
,即它们都是单子:

f(myOptList getOrElse Nil)

我想说的是,你应该只有一个
列表。否则,您将处理一个三元组:空的、有项目的和空的。

选项很好,因为它会迫使您在没有项目时抓住它们。在
列表
的情况下,
选项
可能是多余的,因为已经存在相应的
,即它们都是单子:

f(myOptList getOrElse Nil)
我想说的是,你应该只有一个
列表。否则,您将处理一个三元组的情况:一个是空的,一个有项目且为空的