From: eiel hal Date: 2010-01-18T00:04:23+09:00 Subject: [ruby-list:46787] Re: 動的に生成されるメソッドの命名について えいるです。 > 使い方にあっては特異メソッドのような「クラス名.メソッド名」の呼び出しは不可能であります。 クラスメソッドと特異メソッドを混同していないでしょうか。 クラスメソッドは「クラスの特異メソッド」で、 特異メソッドは「特定のインスタンスに固有なメソッド」です。 「クラス名.メソッド名」のような呼び出しを行うのはクラスメソッドです。 つまり、#meta1,#meta2で生成されるメソッドは特異メソッドではないでしょうか。 2010年1月17日20:11 Moru : > モルです。質問がいい加減すぎるので少し追加します。 > > 以下のソースの中で#meta1のところから見ていきます。 > > 1.#meta1 > meta_test = MetaTest.new %W(there is sparta) > > # meta1 > def meta_test.sparta > p "this is sparta!!!" > end > > ここで宣言されたメソッドは MetaTestクラスのインスタンス変数であるmeta_testに属されるものと見えます。 > 宣言の形のみで言うと特異メソッドに似ていますが、実際にはMetaTestクラスのインスタンスが生成されない限りは > メソッドの宣言が行えないし「クラス名.メソッド名|self.メソッド名」でもないため特異メソッドと呼ぶのも難しそうです。 > > 使い方にあっては特異メソッドのような「クラス名.メソッド名」の呼び出しは不可能であります。 > > インスタンスに属されているところと使い方で判断するとインスタンスメソッドであると思いますが問題はないですか。 > > 2.#meta2 > 配列の要素を使って何個かのメソッドを生成していますが、基本的には#meta1と同様です。 > > 2010/1/16 Moru > >> モルと申します。早速ですが一つ質問させて頂きます。 >> >> 以下のようなソースがあった場合に(かなり雑なコードですが・・・) >> # meta1 と >> # meta2 で >> 生成されるメソッドはどう命名すればいいでしょうか。 >> >> class MetaTest >> >> attr_accessor :will_be_method >> >> >> def initialize methods =[] >> @will_be_method = methods >> end >> >> end >> >> meta_test = MetaTest.new %W(there is sparta) >> >> # meta1 >> def meta_test.sparta >> p "this is sparta!!!" >> end >> >> meta_test.sparta >> >> #meta2 >> meta_test.will_be_method.each do |method| >> eval <<-M >> def meta_test.#{method} >> p "#{method}" >> end >> M >> end >> >> meta_test.there #=> "there" >> meta_test.is #=> "is" >> meta_test.sparta #=> "sparta" >> >> >> 以上です。変な質問であって申し訳ないですが教えて頂けると嬉しいです。 >> -- >> Moru >> > -- えいる