2011/01/19 追記
トップレベルで宣言されたメソッドは例外的にprivateになるようです。
このエントリーのコードは、irb上で実行して確認したんですが、コードをファイルに保存して実行すると、確かにプライベートメソッドになっていて、NoMethodErrorが発生しました。
著者もirbで確認したってことでしょうか。
追記ここまで
著者もirbで確認したってことでしょうか。
追記ここまで
「メタプログラミングRuby」を読んでいたら次のような記述があった。
トップレベルにメソッドを定義すると、メソッドがObjectのインスタンスメソッドになるのはこのためだ。
で、試しに書いてみたコードがこれ。
class C
def m
f
end
def to_s
"output"
end
end
o = C.new
def f
to_s+"!!!"
end
"hello".f # => "hello!!!"
123.f # => "123!!!"
o.m # => "output!!!"
def m
f
end
def to_s
"output"
end
end
o = C.new
def f
to_s+"!!!"
end
"hello".f # => "hello!!!"
123.f # => "123!!!"
o.m # => "output!!!"
マジすか...。