From: matz@... (Yukihiro Matsumoto) Date: 1997-07-14T17:38:14+09:00 Subject: [ruby-list:3342] Re: meta programings [Re:exceptions (Re: Ver 1.1 [Re: Matrix])] まつもと ゆきひろです In message "[ruby-list:3331] Re: meta programings [Re:exceptions (Re: Ver 1.1 [Re: Matrix])]" on 97/07/11, Keiju ISHITSUKA writes: |けいじゅ@今はフリー(^^;;;です. |>っていうか,Class.new/Module.newは定数を定義しないので |>context-classというのは存在しません.戻り値として与えられる |>クラス(あるいはモジュール)を定数なり変数なりに代入してくださ |>いませ.定義部はイテレータブロックを使っているのでバインディ |>ングは変更できません. | |うーん. そういうことですか.... ちょっと気になることが1つ. 今までのクラ |スは文字列に直すと, クラスを定義したところのパスが出ますよね. つまり, | |module Foo | class Bar | ... | end |end | |Foo::Bar.to_s --> Foo::Bar | |この辺りの表現はどうなるんですか? とくに, object.type は文字列を返すの |で, 一意性が崩れてしまって使いづらくなると思いますが? いまんとこClass#newやModule#newを使った場合,クラスのパスは 定義されません.typeで使いにくいのは確かですね.でも,既に話 が出たようにruby 1.1ではtypeなどはクラスオブジェクトそのもの を返すようにしようと思うので,あまり問題はないかも. # 実はパスが正しく定義されないとmarshalで問題が起きるんです # けど. |いや. これがチョーめんどくさいからやりたくないんですけど... |でも. | |a = Foo::Bar::Baz |a.constant_value("class-name") = Module.new("class-name") {...} | |と書けるのかな? それなら問題ないな. 基本的にはこれでいきますね.ただしmarshalの問題は残りますが. |>動的にコードを生成する? lispじゃないんだから. | |まあ. そういわないで, 実際やっているんだから(^^;;; 文字列でなく,コードオブジェクトを直接生成するというのはruby の範囲を越えるという印象が強いです.どうでしょう? そういう のはプログラムがデータとして扱えるlispなどのおはこだと思うの ですが…. まつもと ゆきひろ /:|)