这对我来说似乎很奇怪:说我有一个变量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}}无缝。
答案 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]
类型,并且范围内没有隐式转换。