Scala - 将类型隐式转换为Option [type]

时间:2017-03-19 14:05:58

标签: scala

这对我来说似乎很奇怪:说我有一个变量Option[someType],我为它分配了一个someType对象,为什么我必须显式地将我的对象转换为一个选项? / p>

var num: Option[Int] = Option[Int](3) // works
var num: Option[Int] = 3              // seems reasonable, but doesn't compile

编辑:我的意思是我的问题更多地是“为什么Scala会像这样实现它”,而不是“如何解决这个问题”。如你所见,我知道如何解决它。

我对此感到好奇的原因是Int不能被视为Option[Int]。我明白为什么Int不是List[Int],(尽管我也可以想象它是一个范例),但我没有看到没有转换为{{{ 1}}无缝。

2 个答案:

答案 0 :(得分:3)

你不必投了它。您只需创建Option[Int]类型的对象,因为3不是Option[Int]

Option与所有其他类似。您是否希望实例val l: List[Int] = 3也可以使用?

如果您真的希望自动完成,您可以:

implicit def anyToOption[A](a: A): Option[A] = Option(a)

但是来自和/或普通类型的隐式转换通常被认为是不好的做法。

答案 1 :(得分:0)

Option可以有两种不同的状态,

它是None

val num: Option[Int] = None

或者定义为Some

val num: Option[Int] = Some(99)

您可以定义隐式转换以从Option[Int] to Int转换,反之亦然,但对您不拥有的类型进行隐式转换通常不受欢迎。

您的代码无法编译的原因是您要为Int指定Option[Int]类型,并且范围内没有隐式转换。