initializeはnewした時点で値がsetされる
クラスメソッドでinitializeにsetした値を参照したい時ハマってしまった
class Hoge
attr_accessor :aa
def initialize
@aa = 'aa'
end
def self.bb
@aa
end
end
p Hoge.bb
# => nil
Hoge.newしていないので値をセットできていません、
よってnilが返る
class Hoge
attr_accessor :aa
def initialize
@aa = 'aa'
end
def bb
@aa
end
end
hoge = Hoge.new
p hoge.bb
インスタンスメソッドを利用すれば値を参照できる(当たり前ですよね)
クラスメソッドで値を使いたい時は
initialize使わず直接インスタンス変数に値をセットしましょう。
class Hoge
@aa = 'aa'
def self.bb
@aa
end
end
p Hoge.bb
#=> "aa"
クラスメソッドで使うのかインスタンスメソッドで使うのか、
用途に合わせて、initializeの中身は意識しないといけないんだなと学んだハマりでした。
日々精進