2
我想将变量foo初始化为var foo = Some(0.0)
设置为None
,但我得到None.type doesn't conform to expected type Some[Double]
。指定变量没有值的正确方法是什么?scala:将None设置为Option
我想将变量foo初始化为var foo = Some(0.0)
设置为None
,但我得到None.type doesn't conform to expected type Some[Double]
。指定变量没有值的正确方法是什么?scala:将None设置为Option
由于foo
为Some[Double]
,因此它们不能分配None.type
,因为它们是不同的类型(它们共享一个公共基础并不重要)。为了让您能够做到这一点的,你需要显式声明的foo
类型为Option[Double]
:
scala> var foo: Option[Double] = Some(0.0)
foo: Option[Double] = Some(0.0)
scala> foo = None
foo: Option[Double] = None
或者使用Option.apply
:
scala> var foo = Option(0.0)
foo: Option[Double] = Some(0.0)
scala> foo = None
foo: Option[Double] = None
感谢@Yuval。将类型声明为Option [Double]会将Some(0.0)和None都转换为Option [Double],但没有显式类型,那么它们是不同的类型? – cosmosa
@ cosmos1990这里没有演员。如果没有明确声明类型,编译器会尝试推断出最具体的类型。你正在使用'Some(0.0)',所以编译器推断'Some' [Double]',其中'None'不可分配给。但是,要让编译器将该类型视为基础'Option [Double]',则允许'None'从'None <:Option [Nothing]'被赋值,其中'Nothing'是所有类型的底部类型斯卡拉型系统。 –