我有一个这样的案例类:
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
答案 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
,请使用Option
将null
的值转换为None
:
color = Option(colorFromProtoBuf(...))
如果colorFromProtoBuf
可能会引发错误,请使用Try
:
color = Try(colorFromProtoBuf(...)).toOption
最后,如果colorFromProtoBuf
可能失败,并且您可以编辑此函数,请将签名更改为返回Option[Color]
,如果失败则返回None
,如果成功则返回Some(color)
。
def colorFromProtoBuf(msg: ColorMessage): Option[Color] = {
(我知道这不是单行答案,但可能是正确答案!)