From: matz@... (Yukihiro Matsumoto) Date: 1997-08-18T09:36:08+09:00 Subject: [ruby-dev:151] Re: meta programming features まつもと ゆきひろです In message "[ruby-dev:148] Re: meta programming features" on 97/08/17, 石塚圭樹 writes: |けいじゅ@日本ラショナルです. |了解しました. ということは, rubyの用語(実装上の用語を省く)上では特異ク |ラスという言葉はなくなるんですね? そういうことになりますね. |クラス定数はどうします? 仮想的なクラスとなるとクラス定数を持つのも変か |なという気もしますが?? まあ存在するとしても, 特異メソッドと同じく特異 |クラス定数であると考えればいいのかな? | |# 私は残しておいて欲しいんですけどね. 禁止する必然性もないように思うので残しましょう.とはいえ, class << obj Foo = 5 def foo Foo # (1) end self::Foo # (2) end のどちらかの方法でしかアクセスできませんけどね. |メソッド的アクセスのevalの仕様に関しては, なるほど最もという点が多いん |ですが... | |前に議論のあった, Module#evalは, | | * ローカル変数は静的スコープで共有 | * クラス定数は静的スコープで参照可能(selfのクラス定数優先) | |という仕様になったと思いますが, この仕様と上記のメソッドevalの仕様とが |食い違っているのが気になるんですけど. 食い違っています? ローカル変数についてはなにも説明していな いので食い違うということはないと思うのですが. |>foo.respond_to?("f") と foo.type.methods.include?("f") を組 |>み合わせると調べられるのでは? | |特異メソッドfoo.fは存在するが, メソッドFoo#fが存在しない場合は, 分かる |と思いますが, メソッドFoo#fが存在している時に特異メソッドfoo.fが存在す |るかどうかは分からないのでは? そうか,そうですね.それでは class << obj self.instance_methods.include?("foo") end ではどうでしょう? まつもと ゆきひろ /:|)