Ruby attr_reader позволяет изменять строковую переменную при использовании <<

Совершил странное поведение и задумался, может ли кто-нибудь еще подтвердить то, что я вижу.

Предположим, вы создаете класс с переменной-членом и разрешаете его чтение с помощью attr_reader.

class TestClass
  attr_reader :val

  def initialize(value)
   @val = value
  end
end

Теперь, когда я делаю следующее, кажется, что изменяется значение @val, хотя я предоставил ему только права чтения.

test = TestClass.new('hello')
puts test.val
test.val << ' world'
puts test.val

Это возвращает

hello
hello world

Это просто результат некоторых тестов, которые я провел в irb, поэтому не уверен, всегда ли это так

6
задан Andrew Grimm 6 November 2011 в 23:45
поделиться