다음 두 예제에서 나는 상수 String을 만들고 concat 메서드를 사용하여 수정했습니다. 그것은 상수이기 때문에 컴파일러 경고를 기대하지만 할당 연산자를 사용할 때 두 번째 예제에서 하나만받습니다. 왜 이런거야? 의 할당은 연산자를 사용할 필요가 없습니다 때문에 CONCAT 방법부터왜 할당 연산자가 없어 컴파일러 경고없이 루비 상수를 수정할 수 있습니까?
X = "hello"
X.concat(" world")
puts X # no warning
X = "hello"
X = X.concat(" world")
puts X # warning: already initialized
, 즉 내가 무엇을 할 것이라고 일반적이다, 장소에 문자열을 수정합니다. 그렇다면 할당 연산자의 존재로 인해 컴파일러는이 두 연산을 다른 것으로 식별하게되는 이유는 무엇입니까?
엄밀히 말하면 컴파일러 경고가 아닌 인터프리터 경고입니다. 루비는 일반적으로 컴파일되지 않습니다. –