在下面的两个示例中,我做同样的事情,创建一个常量 String 并使用 concat 方法对其进行修改。因为它是一个常量,所以我期望一个编译器警告,但是当我使用赋值运算符时,在第二个示例中只收到一个警告。为什么是这样?
X = "hello"
X.concat(" world")
puts X # no warning
X = "hello"
X = X.concat(" world")
puts X # warning: already initialized
由于 concat 方法修改了字符串,这通常是我会做的,因为不需要使用赋值运算符。那么,为什么赋值运算符的存在会导致编译器将这两个操作识别为不同的呢?