dispiace per questa domanda niubbo ... diciamo abbiamo:rubino: come impedire la modifica di una variabile di istanza matrice attraverso un lettore attributo
class TestMe
attr_reader :array
def initialize
@array = (1..10).to_a
end
fine
è poi possibile fare:
>> 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"]
- questo va chiaramente contro l'incapsulamento, doesn'it?
- esiste un modo per proteggere rapidamente la variabile di matrice dalla modifica?
- ... o devo implementare un lettore di copia profonda ogni volta che la mia variabile di istanza ha metodi "distruttivi"?
EDIT ho letto da qualche parte che è "cattivo OO" per esporre una variabile di istanza di matrice. Se è vero, perché?
Penso che la tua domanda iniziale risponda alla tua seconda domanda sul perché esporre la variabile di istanza dell'array non è così buona. –
@ KL-7: Totalmente: D –