From: keiju@... (Keiju ISHITSUKA) Date: 1997-08-29T14:05:36+09:00 Subject: [ruby-list:3927] Re: class variable けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :03923 ] the message: "[ruby-list:3923] class variable ", on Aug/29 12:28(JST) toyofuku@juice.or.jp writes: > 豊福@パパイヤです。 >> Smalltalkには, クラス変数とクラスのインスタンス変数はあります. ちなみ >> に, Smalltalkでも, rubyと同様にクラスのインスタンス変数はインスタンス >> からは参照できません. > > Smalltalk のクラス変数とクラスのインスタンス >変数はどう違う/どう使いわけるのですか。 クラス変数は, そのクラス自身とそのサブクラスとそれらのインスタンスで共 有する変数です. rubyのクラス定数の変数版ですね. 通常大文字から始まりま す. クラスのインスタンス変数は, そのクラスだけに存在する内部変数で, 通常の オブジェクトのインスタンス変数と同じもので, 他のオブジェクトから直接見 ることはできません. > 私が「クラス変数」と呼んでいたのがどちらか >わかりませんが、インスタンスから見えないもの >だったような気もしてきました。インスタンスに >見せるときは引数で渡してたような。ruby で書く >と次のような感じです。 > > class Foo > @default_x = 123 > def Foo.new > aFoo = super > aFoo.init(@default_x) > return aFoo > end > def init(default_x) > @x = default_x > end > def print_x > print @x > end > end > > foo = Foo.new > foo.print_x > >と書いてみたら 123 と出ました。このプログラム >でもいいのかな? これは... オブジェクト生成時にデフォルト値を設定したいんですね. で, デフォルト値 は定数でなく変数にしたいと... こういうことは, クラス定数を直接利用して も実現できませんね. あと, rubyですと, 上記の実装でも良いと思いますが, デフォルト値が他にも たくさんある場合などは: class Foo DEFAULTS = {} DEFAULTS[:x] = 123 DEFAULTS[:y] = ... ... def Foo.new aFoo = super aFoo.init return aFoo end def init @x = Defaults[:x] @y = Defaults[:y] ... end end という実装もあると思いますし, さらに, デフォルト値があまり変わらないよ うでしたら. class Foo DEFAULTS = {} DEFAULTS[:x] = 123 DEFAULTS[:y] = ... ... def Foo.new aFoo = super aFoo.init return aFoo end def x return @x if defined? @x DEFALTS[:x] end attr :x, TRUE end 今な感じの実装もありますね. __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@bc.mbn.or.jp <<---