2017-04-02 4 views
2

var foo = Some(0.0)Noneに初期化した変数fooを設定しようとしていますが、変数に値がないことを指定する正しい方法は何ですか?scala:setなしtoオプション

答えて

6

fooSome[Double]なので、異なるタイプであるため、None.typeに割り当てることはできません(共通のベースを共有することは問題ありません)。あなたがそれを行うことができるようにするためには、明示的にOption[Double]するfooの型を宣言する必要があります:

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]'を推論します。しかし、コンパイラにタイプを 'Option [Double]'として表示するように指示すると、 'None <:Option [Nothing]'から 'None'を割り当てることができます。' Nothing'は、スカラ型システム。 –

関連する問題