[#46732] ヒアドキュメント内の変数展開が正常に行われない — ShingoKintaka <kamuycikap@...>

Ruby  :1.8.7 (Ubuntu9.10)

12 messages 2010/01/05
[#46733] Re: ヒアドキュメント内の変数展開が正常に行われない — rubikitch@... 2010/01/06

From: ShingoKintaka <kamuycikap@tulip.ocn.ne.jp>

[#46800] DLモジュールの使い方 — kouichi_someya@...

染谷と申します。

12 messages 2010/01/20
[#47678] プログラム実行時に「[BUG] Segmentation fault」 — 染谷 康一 <kouichi_someya@...> 2010/12/09

染谷と申します。

[ruby-list:46784] Re: [ruby-list:46779] 動的に生成されるメソッドの命名について

From: Moru <lateau@...>
Date: 2010-01-17 11:11:58 UTC
List: ruby-list #46784
モルです。質問がいい加減すぎるので少し追加します。

以下のソースの中で#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 <lateau@gmail.com>

> モルと申します。早速ですが一つ質問させて頂きます。
>
> 以下のようなソースがあった場合に(かなり雑なコードですが・・・)
> # 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
>

In This Thread