クラスにおける定数
Rubyのクラスの定数であるが、アルファベット大文字・数字、アンダースコアで構成されるのが多い。
例
USER_NUMBER = 10 COUNTRY_NUMBER = {japan: 10, india: 20, spain: 30}
定数はインスタンスメソッドからでもクラスメソッドからでも、参照できる。
class User USER_NUMBER = 10 def self.show_number USER_NUMBER end def show_number USER_NUMBER end end User.show_number #=> 10 User.last.show_number #=> 10 User::USER_NUMBER #=> 10
定数はメソッドの内部では作成できず、必ずクラス構文の直下で作成すること。メソッド内部で作成しようとすると、dynamic constant assignmentとエラーが出る。
[41] pry(main)> class Foo [41] pry(main)* def bar [41] pry(main)* VALUE = 10 [41] pry(main)* end [41] pry(main)* end SyntaxError: (eval):4: dynamic constant assignment VALUE = 10 ^~~~~
また、定数は外部からも変更できる。
[45] pry(main)> class Foo [45] pry(main)* PRICE = 100 [45] pry(main)* end => 100 [46] pry(main)> Foo::PRICE => 100 [48] pry(main)> [49] pry(main)> Foo::PRICE = 20 (pry):30: warning: already initialized constant Foo::PRICE (pry):27: warning: previous definition of PRICE was here => 20 [52] pry(main)> Foo::PRICE => 20