В следующих двух примерах я делаю то же самое, создавая константу String и используя метод concat для ее изменения. Поскольку это константа, я ожидаю предупреждения компилятора, но получаю только одно во втором примере, когда использую оператор присваивания. Почему это?
X = "hello"
X.concat(" world")
puts X # no warning
X = "hello"
X = X.concat(" world")
puts X # warning: already initialized
Поскольку метод concat изменяет строку на месте, это обычно то, что я хотел бы сделать, поскольку нет необходимости использовать оператор присваивания. Итак, почему присутствие оператора присваивания заставляет компилятор идентифицировать эти две операции как разные?