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

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

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

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
Reply | Threaded
Open this post in threaded view
|

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

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 <[hidden email]>

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

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

eiel hal
えいるです。

> 使い方にあっては特異メソッドのような「クラス名.メソッド名」の呼び出しは不可能であります。

クラスメソッドと特異メソッドを混同していないでしょうか。
クラスメソッドは「クラスの特異メソッド」で、
特異メソッドは「特定のインスタンスに固有なメソッド」です。
「クラス名.メソッド名」のような呼び出しを行うのはクラスメソッドです。

つまり、#meta1,#meta2で生成されるメソッドは特異メソッドではないでしょうか。


2010年1月17日20:11 Moru <[hidden email]>:

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

Reply | Threaded
Open this post in threaded view
|

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

NARUSE, Yui-2
(2010/01/18 0:04), eiel hal wrote:

> えいるです。
>
>> 使い方にあっては特異メソッドのような「クラス名.メソッド名」の呼び出しは不可能であります。
>
> クラスメソッドと特異メソッドを混同していないでしょうか。
> クラスメソッドは「クラスの特異メソッド」で、
> 特異メソッドは「特定のインスタンスに固有なメソッド」です。
> 「クラス名.メソッド名」のような呼び出しを行うのはクラスメソッドです。
>
> つまり、#meta1,#meta2で生成されるメソッドは特異メソッドではないでしょうか。

えいるさんの仰るとおり、まさに「特異メソッド」だと思います。

なお、他にも所々用語が間違っている部分が見えます。
「はじめての Ruby」や「プログラミング言語 Ruby」を未読でしたら、
読んでみるとよろしいのではないでしょうか。

--
NARUSE, Yui  <[hidden email]>

Reply | Threaded
Open this post in threaded view
|

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

Moru
ご指摘ありがとうございます。
ルビレファランスマニュアルにも説明がありました。

認識していることを認識しているまま言うにはまだ日本語が足りないです。>> Yui

--
Moru


2010/1/18 NARUSE, Yui <[hidden email]>

> (2010/01/18 0:04), eiel hal wrote:
> > えいるです。
> >
> >> 使い方にあっては特異メソッドのような「クラス名.メソッド名」の呼び出しは不可能であります。
> >
> > クラスメソッドと特異メソッドを混同していないでしょうか。
> > クラスメソッドは「クラスの特異メソッド」で、
> > 特異メソッドは「特定のインスタンスに固有なメソッド」です。
> > 「クラス名.メソッド名」のような呼び出しを行うのはクラスメソッドです。
> >
> > つまり、#meta1,#meta2で生成されるメソッドは特異メソッドではないでしょうか。
>
> えいるさんの仰るとおり、まさに「特異メソッド」だと思います。
>
> なお、他にも所々用語が間違っている部分が見えます。
> 「はじめての Ruby」や「プログラミング言語 Ruby」を未読でしたら、
> 読んでみるとよろしいのではないでしょうか。
>
> --
> NARUSE, Yui  <[hidden email]>
>
>