2017-04-02 45 views
2

我想将变量foo初始化为var foo = Some(0.0)设置为None,但我得到None.type doesn't conform to expected type Some[Double]。指定变量没有值的正确方法是什么?scala:将None设置为Option

回答

6

由于fooSome[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 
+0

感谢@Yuval。将类型声明为Option [Double]会将Some(0.0)和None都转换为Option [Double],但没有显式类型,那么它们是不同的类型? – cosmosa

+1

@ cosmos1990这里没有演员。如果没有明确声明类型,编译器会尝试推断出最具体的类型。你正在使用'Some(0.0)',所以编译器推断'Some' [Double]',其中'None'不可分配给。但是,要让编译器将该类型视为基础'Option [Double]',则允许'None'从'None <:Option [Nothing]'被赋值,其中'Nothing'是所有类型的底部类型斯卡拉型系统。 –

相关问题