意外とハマる?classやmodule内に書かれたメソッド以外のプログラムの評価について
test.rb という以下の内容のファイルがあります。
puts "Hello!" class Fuga def self.fuga "Ruby!" end end module Foo puts "World!" def foo "Hatena!" end end class Hoge puts Fuga.fuga include Foo end hoge = Hoge.new puts hoge.foo puts "Diary!"
ruby test.rb と実行すると以下のようになります。
% ruby test.rb Hello! World! Ruby! Hatena! Diary!
classやmodule内に書かれたメソッド以外のプログラムは「Rubyインタプリタが読み込んだ時にすぐ評価される」。なので書く場合は読み込む順番を考慮しないといけないので、注意が必要です。以下はエラーです。
class Hoge puts Fuga.fuga end class Fuga def self.fuga "Ruby!" end end
実行結果
% ruby test.rb test.rb:2: uninitialized constant Hoge::Fuga (NameError)