From: Takashi SUGA Date: 2002-03-09T19:10:55+09:00 Subject: [ruby-list:34256] Re: when.exe の Ruby 化 (Re: newdate) 須賀です。 > Outfit > @@outfit を Outfit モジュールまたは Outfit クラスで扱いたいが、Outfit > で定義すると、Outfit のクラス変数となってしまい、目的を達しない。よい > 解決法が見つからない。 の件、ちょっと実験しました。ruby 1.6.4 (2001-06-04) [i386-cygwin] にて、 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 class Outfit def self.foo(a) @@outfit = a end def baz() p @@outfit end end class Foo < Outfit @@outfit ='Foo' def bar() p @@outfit end end class Bar < Outfit @@outfit ='Bar' def bar() p @@outfit end end foo = Foo.new bar = Bar.new foo.bar; Foo.foo('Baz'); foo.bar; # foo.baz bar.bar; Bar.foo('Baz'); bar.bar; # bar.baz 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 を実行すると、 "Foo" "Baz" "Bar" "Baz" となり、baz のコメントをはずすと uninitialized class variable が出ます。 foo と bar はサブクラスの @@outfit, baz はスーパークラスの @@outfit を 見ている。 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 class Outfit class << self; def foo(a) @@outfit = a end end def baz() p @@outfit end end class Foo < Outfit @@outfit ='Foo' def bar() p @@outfit end end class Bar < Outfit @@outfit ='Bar' def bar() p @@outfit end end foo = Foo.new bar = Bar.new foo.bar; Foo.foo('Baz'); foo.bar; foo.baz bar.bar; Bar.foo('Baz'); bar.bar; bar.baz 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 を実行すると、 "Foo" "Foo" "Baz" "Bar" "Bar" "Baz" こんどは、bar はサブクラスの @@outfit, foo と baz はスーパークラスの @@outfit を見ている。 どうしても baz でサブクラスの @@outfitを見るようにできません。 見るようにするには、どうすれば良いのでしょうか? -- ////////// 須賀 隆 ///////////////////////// SGB02104@nifty.com //////// // http://www.asahi-net.com/~dd6t-sg/ mailto:suchowan@box.email.ne.jp //