まつもと ゆきひろです
In message "[ruby-list:9978] include vs extend"
on 98/10/11, TEI meiki <tei / harmony.co.jp> writes:
|鄭です。
|lib/tk.rb を眺めていると、
|
| module TkCore
| include TkComm
| extend TkComm
|
|といった記述があります。
|リファレンスマニュアルで、include と extend をみてもいまひとつ理解できません。
|include は、
|
| module Hoge
| あれこれ
| end
| class Hare
| include Hoge # ここに 「あれこれ」 を書いたのと同じ事
| なんとかかんとか
| end
|
|と理解していたのですが、あってますでしょうか?
ほぼ合ってます.「ほぼ」というのは,includeはここにあれこれ
書いたのとはちょっと違うからです.
* includeしたモジュールの定数は Hare::Const で参照できない
* includeしたメソッドと同じ名前のメソッドを定義するとsuper
で呼び出せる
点が違います.
|extend は、
|
| module Hoge
| あれこれ
| end
| class Hare
| extend Hoge # ここに 「あれこれ」の中のメソッド定義だけ
| # 抜きだして書いたのと同じ。
| なんとかかんとか
| end
|
|という解釈で、あってますでしょうか?
違います.extendはそのオブジェクト(の特異クラス)にincludeし
ます.つまり
module Hoge
class Hare
class <<Hare
include Hoge
end
end
と同じです.意味としては「そのモジュールのメソッドをクラスメ
ソッドとして追加する」です.
|上の理解だと、、
|
| module TkCore
| include TkComm
| extend TkComm
|
|と同じモジュールを include してextend する意義がわからないのです。
「include TkComm」でTkCommのメソッドをTkCoreのメソッドとして
追加し,「include TkComm」でTkCommのメソッドをTkCoreのモジュー
ルメソッドとして追加してます.
まつもと ゆきひろ /:|)