From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-08-29T12:24:49+09:00 Subject: [ruby-list:3922] Re: class variable けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :03914 ] the message: "[ruby-list:3914] Re: class variable ", on Aug/29 02:05(JST) shugo@po.aianet.ne.jp (前田 修吾/ maeda shugo) writes: >前田です。 >|クラス階層がある時には, クラス定数の場合と動作がことなってしまいます. >ああ、そうですね、全然考えてませんでした。 >class Module > def class_attr(name, writable) > if name.is_a? Fixnum > name = name.id2name > end > if writable > writable = "TRUE" > else > writable = "FALSE" > end > class_name = self.to_s > eval %{ > class << self > attr :__#{name}, #{writable} > def #{name} > #{class_name}.__#{name} > end > def #{name}=(val) > #{class_name}.__#{name} = val > end > end > } > end >end > >というのはちょっと苦しいですか。 くるしいですねえ... それに. これはクラス定数っぽくはなっていますが, モジュール定数の変わり にはなっていません. module Foo C = "foo" def Foo.foo return "foo" end end class Bar include Foo print C print foo end このプログラムを実行すると分かりますが, モジュール定数は, includeした クラスに引き継がれますが, モジュールの特異メソッドは includeしたクラス には引き継がれません. >素直にクラス定数を使った方がよいかな。 たぶん. その通りでしょう. または, クラス設計の問題になりますが, 独自にメタモデルを採用するかでしょ う. __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@bc.mbn.or.jp <<---