预期类型不匹配:选项[颜色],实际:颜色

时间:2018-11-05 14:06:31

标签: scala protocol-buffers

我有一个这样的案例类:

case class ColorDetail(
    color: Option[Color],
    shades: List[Shade]
)

我有一个带有此签名的方法:

def colorFromProtoBuf(msg: ColorMessage): Color = {
 ...
}

当我尝试做时:

ColorDetail(
   color = colorFromtProtoBuf(...), //Type mismatch here
   shades = ...
)

我得到

Type mismatch, expected: Option[Color], actual: Color

如何解决此问题而不更改我的案例类或方法签名。理想情况下,我只想更改出现错误的行。有什么方法可以将其转换为Option[Color]而不是Color

2 个答案:

答案 0 :(得分:4)

cg$ind_its.ite_id              := true;
如果您的函数返回cg$rec_its.whs_id := :WHS_ID;,则

cg$ind_its.whs_id := true;将被分配给cg$rec_its.whs_id_transfer_in := :WHS_ID_TRANSFER_IN;cg$ind_its.whs_id_transfer_in := true;

答案 1 :(得分:3)

如果保证colorFromProtoBuf成功,您可以将其包装在Some中:

color = Some(colorFromProtoBuf(...))

如果colorFromProtoBuf可能返回null,请使用Optionnull的值转换为None

color = Option(colorFromProtoBuf(...))

如果colorFromProtoBuf可能会引发错误,请使用Try

color = Try(colorFromProtoBuf(...)).toOption

最后,如果colorFromProtoBuf可能失败,并且您可以编辑此函数,请将签名更改为返回Option[Color],如果失败则返回None,如果成功则返回Some(color)

def colorFromProtoBuf(msg: ColorMessage): Option[Color] = {

(我知道这不是单行答案,但可能是正确答案!)