Ruby/Stałe klasowe
< Ruby
Stałe klasowe
edytujNazwa stałej zaczyna się od dużej litery. Stałej nie powinno przypisywać się wartości więcej niż jeden raz. W bieżącej implementacji Rubiego ponowne przypisanie wartości do stałej generuje ostrzeżenie, ale nie błąd:
irb(main):001:0> zmienna = 30 => 30 irb(main):002:0> zmienna = 31 => 31 irb(main):003:0> Stala = 32 => 32 irb(main):004:0> Stala = 33 (irb):4: warning: already initialized constant Stala => 33
Stałe mogą być definiowane wewnątrz klas, ale w przeciwieństwie do zmiennych instancji lub zmiennych klasowych, są one dostępne na zewnątrz klasy.
class Stale
S1=101
S2=102
S3=103
def pokaz
puts "#{S1} #{S2} #{S3}"
end
end
#puts S1 #=> .../main.rb:9: uninitialized constant S1 (NameError)
puts Stale::S1 #=> 101
Stale.new.pokaz #=> 101 102 103
Stałe mogą być również definiowane w modułach.
module StaleModul
S1=101
S2=102
S3=103
def pokaz_stale
puts "#{S1} #{S2} #{S3}"
end
end
#puts S1 #=> .../main.rb:10: uninitialized constant S1 (NameError)
include StaleModul
puts S1 #=> 101
pokaz_stale #=> 101 102 103
S1=99 # nie najlepszy pomysl
puts S1 #=> 99
StaleModul::S1 #=> 101
StaleModul::S1=99 # ...to nie bylo mozliwe we wczesniejszych wersjach
#=> /main.rb:10: uninitialized constant S1 (NameError)
#pelna swoboda by strzelic sobie w stope
puts StaleModul::S1 #=> 99