割り当てがキーです。以下のREPLセッションで 見て:あなたはすべてがうまく行く変数の値を再割り当てしようとしない限り、あなたが見ることができます
[email protected] ~ $ scala
Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val x:Char = 'a'
x: Char = a
scala> x + 1
res0: Int = 98
scala> var y:Char = 'a'
y: Char = a
scala> y + 1
res1: Int = 98
scala> y = y + 1
<console>:8: error: type mismatch;
found : Int
required: Char
y = y + 1
^
scala>
ように。 'a'+1
またはx + 1
と書くと、Int
に変換されます。 最終的にx = x + 1
に再割り当てしようとすると、Int
の値をChar
変数に割り当てようとしています。コンパイルエラーが発生する理由を説明します。
Char
コンパニオンオブジェクトには、implicit def char2int(x: Char): Int
メソッドがあります。 私はvar x:Char = 'a' + 1
で最初に起こるのは、このメソッドを呼び出すことで、 'a'を97に変換すると考えられます。次に97に1が追加され、両方ともInt
となります。次に、変数x
はval y:Char = 98
と同じ方法でインスタンス化されます。これは、変数の初期化の仕組みを説明していると思います。
この答えていませんが、なぜ 'のvar X:シャア= A + 1点の '作品が、' X = X + 1 'はしません。最初の代入では、 'a + 1'は暗黙的に' Char'に変換されますが、再割り当てではそれはしません。どうして? –
私は自分の答えを編集しました。これが私の考えとは違う場合は、回答の削除に投票してください。その理由は、根本的なものを理解できないからです。 –
また、「最初の割り当て」と「初期化」を区別しましょう。これは重要だと思います。変数の初期化は値の初期化と変わりません。私は 'val x:Char = 'a' + 1'は' var x:Char = 'a' + 1'と同じです。 –