From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-04-20T15:09:16+09:00 Subject: [ruby-dev:2438] Re: [Bug or Spec?] extend and include けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :2429 ] the message: "[ruby-dev:2429] Re: [Bug or Spec?] extend and include ", on Apr/20 10:23(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >以下のような仕様で妥協できますか? (中略) >つまり,extend(またはinclude)した時点のモジュールのinclude状 >態を取り込むというものです.Aの時点で自動的に反映させる仕様 >というのは現在の実装では不可能です.自動的な反映は現在の実装 >を総取り換えするほど重要な仕様ではないと考えています. それで良いです. あ. でも, 以下の場合はどうなります? irb(main):001:0> module Foo irb(main):002:1> def foo irb(main):003:2> p "foo" irb(main):004:2> end irb(main):005:1> end nil irb(main):006:0> class Bar irb(main):007:1> def bar irb(main):008:2> p "bar" irb(main):009:2> end irb(main):010:1> end nil irb(main):011:0> bar = Bar.new # irb(main):012:0> class Bar irb(main):013:1> include Foo irb(main):014:1> end Bar irb(main):015:0> bar.foo "foo" "foo" nil これは今でもできているんですね... でも, さらに: irb(main):016:0> module Baz irb(main):017:1> def baz irb(main):018:2> p "baz" irb(main):019:2> end irb(main):020:1> end nil irb(main):024:0> module Foo irb(main):025:1> include Baz irb(main):026:1> end Foo irb(main):027:0> bar.baz NameError: undefined method `baz' for # (irb):1 (irb_local_binding):1:in `eval' これは駄目なんですね... 今は, クラスに対するモジュール追加は自動的に認 識されるが, モジュールに対してモジュールとインクルードしても分からないっ てことですか? そうか, クラスが継承列を持っているんですね. で, 質問ですが, 新案では, どうやったらbarにbazが分かるようになるのでしょ う? もう一度includeし直す? class Bar include Foo end __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---