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