如何返回Option [List]?

时间:2018-11-04 22:04:47

标签: scala

我有一个这样的案例类:

case class ColorDetails(color: Color = Color(),
                         shades: List[Shades] = Nil)

我在下面可以正常使用

  final case class GetColorDetails(replyTo: ActorRef[Option[ColorDetails]])
      extends ColorCommand
  ....
    case GetColorDetails(replyTo) =>
      if (state.color.isEmpty) {
        replyTo ! None
      } else {
        replyTo ! Some(ColorDetails(state.color, state.shades))
      }
      Effect.none

但是,我现在尝试按以下方式实现GetColors

  final case class GetColors(replyTo: ActorRef[Option[List[ColorDetails]]])
    extends ColorCommand
  ....
    case GetColors(replyTo) =>
      if (state.color.isEmpty) {
        replyTo ! None
      }
      else {
        replyTo ! List[ColorDetails(state.color, state.shades)]
      }
      Effect.none

但是我遇到了错误:Type mismatch, expected Option[List[ColorDetails]], actual: List[ColorDetails]

我该如何解决?

如果我尝试返回Some,则会收到']' expected but '(' found错误

scala> case class Color(color: String)
defined class Color

scala> Some(List[Color("red")])
<console>:1: error: ']' expected but '(' found.
       Some(List[Color("red")])
                      ^

1 个答案:

答案 0 :(得分:3)

如果要返回Option[List[ColorDetails]],可以按以下步骤操作:

Some(myList)

其中myListList[ColorDetails],简单地是None,表示空的选项。

当然,根据应用程序的不同,可能没有必要期望列表包裹在选项中(因为可能已经使用了一个空列表来表明事实那里没有东西),但这取决于您的设计