pena por esta pregunta novato ... digamos que tenemos:Ruby: cómo evitar la modificación de una variable de instancia de matriz a través de un lector de atributo
class TestMe
attr_reader :array
def initialize
@array = (1..10).to_a
end
final
entonces es posible hacer:
>> 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"]
- esto va claramente en contra de la encapsulación, doesn'it?
- ¿hay alguna forma de proteger rápidamente la variable de matriz para que no se modifique?
- ... ¿o necesito implementar un lector de copia profunda cada vez que la variable de mi instancia tenga métodos "destructivos"?
EDITAR leí en alguna parte que es "malo OO" para exponer una variable de instancia de matriz. Si es verdad, ¿por qué?
Creo que su pregunta original responde a su pregunta de segundos sobre por qué exponer la variable de instancia de matriz no es tan buena. –
@ KL-7: Totalmente: D –