2017-04-02 72 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'是所有類型的底部類型斯卡拉型系統。 –

相關問題