November 2012
Intermediate to advanced
888 pages
54h 46m
Polish
Chcemy zabezpieczyć obiekt przed przyszłymi zmianami stanu.
Należy zamrozić obiekt za pomocą metody Object#freeze:
frozen_string = 'Brrrr!'
frozen_string.freeze
frozen_string.gsub('r', 'a') # => "Baaaa!"
frozen_string.gsub!('r', 'a')
# TypeError: can't modify frozen string
Gdy obiekt zostaje zamrożony, jego zmienne instancyjne zostają permanentnie związane ze swymi bieżącymi wartościami. Nie są zamrażane same wartości — ich zmienne instancyjne nadal mogą być modyfikowane, w zakresie takim samym jak poprzednio:
sequences = [[1,2,3], [1,2,4], [1,4,9]].freeze sequences << [2,3,5] # TypeError: can't modify frozen array sequences[2] << 16 # ...