« Java Scripting APIからAppleScriptを使う | メイン | WebSocketを使ったKeynote '08でもiPhoneから操作できるKeynote08Remote »

Rubyはトップレベルで宣言したメソッドがインスタンスメソッドになる(追記:と思ったのは気のせいかも...。)

2011/01/19 追記
トップレベルで宣言されたメソッドは例外的にprivateになるようです。
このエントリーのコードは、irb上で実行して確認したんですが、コードをファイルに保存して実行すると、確かにプライベートメソッドになっていて、NoMethodErrorが発生しました。
著者も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!!!"
マジすか...。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド