2008年2月 2日

[ruby-list:44555] Re: include

こんにちは、黒田ひらくと申します。

Masatoshi SEKI さんは書きました:
> トップレベル(?)でincludeを使うと、どのオブジェクトも
> モジュールに定義されているメソッドを呼べてしまう
> のでしょうか?

http://www.ruby-lang.org/ja/man/html/Ruby_CDD1B8ECBDB8.html#main

によると、トップレベルのselfはObjectクラスのインスタンスですが、特異メソッドとしてinclude等が定義さ
れているそうです。
このmain#includeを実行するとObject.includeと同様の効果があるので、その結果、全てのオブジェクトでイ
ンクルードしたモジュールのメソットが呼べるようになるようです(全てのクラスはObjectクラスのサブクラス
なので)。

---ソース---
#!/usr/bin/ruby
puts self, self.class
module M
def self.included(by)
puts "M included by #{by}"
end
end
include M
puts Object.included_modules
--------
---出力----
main
Object
M included by Object
M
Kernel
--------

--
--------------------------------------------------
黒田 拓(くろだ ひらく)
hiraku@xxxxx
http://www.hinet.mydns.jp/
--------------------------------------------------

投稿者 xml-rpc : 2008年2月 2日 17:20
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69392
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。