kzakzaRubyのinstance_evalがブロック内のテキストを評価してレシーバーであるインスタンスの元で実行するメソッドであるということは、irbを叩いてなんとく理解できつつあるような気がします。逆に「何故そうなるのか?Why?」という疑問も増えてきました。メソッド以下のように定義したメソッド”aaa”はStringクラスのインスタンス”str”の特異メソッドになるようです。“a”;end}str.aaa⇒”a”[/ruby]しかし、このインスタンスメソッド”aaa”で返された”a”は文字列であるはずなので、Stringクラスかと思いきや、NilClassらしくて、この理由がよくわからないんですよね。[ruby]str.class⇒Stringstr.aaa.class⇒NilClass[/ruby]ちなみにFixnumクラスを返すはずのインスタンスメソッド”bbb”でも同じ結果です。「putsの戻り値がnilだからでは」というコメントをいただきました。試してみると確かにその通りでした。bbb;1;end}str.aaa.class⇒Stringstr.bbb.class⇒Fixnum[/ruby]定数インスタンスの中で定数を定義してみます。インスタンスの中で定数を定義することの意味がまだよくわかりませんが、一応可能なようです。この定数”AAA”はどこで定義されてだろうか?どうやって参照するのだろうか?疑問が次から次へと出てきて止まりません。–さらにこのインスタンス”str”の中でクラスを作ってみたいと思います。BBB;end}[/ruby]BBBクラスのインスタンスはつくることができます。BBB.newb.class⇒BBB[/ruby]Objectクラスのすぐ下にクラスが作られるんですね。Stringクラスのインスタンス”str”の中で作られるので、Stringクラスのサブクラスとして生成されるかと思っていました。深く考えるとこの辺の挙動が理解できそうなのですが、今のところ???状態です。ちなみにクラスはClassクラスのインスタンスでもあるので、instance_evalを用いるとこんな感じになります。Class.new#これでCCCクラスの生成。⇒Class#CCCはClassクラスのインスタンス[/ruby]Classクラスのインスタンス、”CCC”にメソッドと定数を定義しています。“789101112”}CCC::EEE⇒”789101112′′[/ruby]それぞれクラスメソッドとクラス定数として定義されているようです。クラスメソッドに定義されるのはClassクラスのインスタンス”CCC”の特異メソッド(=クラスCCCのクラスメソッド)として定義されているからです。Classクラスのインスタンスをレシーバーにする限り、instance_evalとclass_evalと違いは無いような気がする。PMさっそくありがとうございます。いうことなのですが・・。気がつきませんでした。PM確認したところ、仰るとおりでした。その旨、追記しました。ありがとうございました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。