Ruby: как предотвратить модификацию переменной экземпляра массива с помощью средства чтения атрибутов

извините за этот новенький вопрос ... допустим, у нас есть:

class TestMe
 attr_reader :array

 def initialize
   @array = (1..10).to_a
 end

end

тогда можно сделать:

>> a = TestMe.new
=> #<TestMe:0x00000005567228 @x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>
>> a.array.map! &:to_s
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
>> a.array
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
  • это явно противоречит инкапсуляции, не так ли?
  • есть ли способ быстро защитить переменную массива от изменения?
  • ... или мне нужно реализовать программу чтения глубокой копии каждый раз, когда в моей переменной экземпляра есть «деструктивные» методы?

РЕДАКТИРОВАТЬ Я где-то читал, что "плохой объектно-ориентированный подход" раскрывать переменную экземпляра массива. Если это правда, то почему?

9
задан m_x 13 February 2012 в 11:04
поделиться