Ruby/Stałe klasowe

Stałe klasowe

edytuj

Nazwa 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