次の2つの例では、同じことを行います。定数Stringを作成し、concatメソッドを使用してそれを変更します。それは定数なので、私はコンパイラの警告を期待していますが、代入演算子を使用すると、2番目の例で1つしか受け取りません。どうしてこれなの?代入演算子がないと、コンパイラの警告なしにRuby定数を変更できないのはなぜですか?
X = "hello"
X.concat(" world")
puts X # no warning
X = "hello"
X = X.concat(" world")
puts X # warning: already initialized
concatメソッドが代わりに文字列を変更しているのでassigment演算子を使用する必要がないため、それは、私がどうなるのか正常です。したがって、なぜ代入演算子が存在すると、コンパイラはこれら2つの演算を異なるものとして識別させるのでしょうか?
厳密に言うと、コンパイラの警告ではなく、インタプリタの警告です。 Rubyは通常はコンパイルされません。 –