2
にvar foo = Some(0.0)
をNone
に初期化した変数fooを設定しようとしていますが、変数に値がないことを指定する正しい方法は何ですか?scala:setなしtoオプション
にvar foo = Some(0.0)
をNone
に初期化した変数fooを設定しようとしていますが、変数に値がないことを指定する正しい方法は何ですか?scala:setなしtoオプション
foo
はSome[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
おかげ@Yuval。型をOptionとして宣言すると[Double] Some(0.0)とNoneをOption [Double]にキャストしますが、明示的な型がないと型が異なりますか? – cosmosa
@ cosmos1990ここにキャスティングはありません。型の明示的な宣言がなければ、コンパイラは最も特定の型を推測しようとします。あなたは 'Some(0.0)'を使っているので、コンパイラは 'Some [Double]'を推論します。しかし、コンパイラにタイプを 'Option [Double]'として表示するように指示すると、 'None <:Option [Nothing]'から 'None'を割り当てることができます。' Nothing'は、スカラ型システム。 –