ie-developers / ie-questions

public questions for ie students.
10 stars 0 forks source link

Ruby:オブジェクトモデル #4

Closed kazuminn closed 10 years ago

kazuminn commented 10 years ago

メタプログラミング(初版 p53)ページに 「オブジェクトのメソッドは、オブジェクトではなくオブジェクトのクラスに住んでいて、クラスのインスタンスメソッドとも呼ばれる。」 と記述されています。

がメソッドはオブジェクトではないのですか?

atton commented 10 years ago

method も Object ですね。

[27] pry(main)> self.method(:puts).class.ancestors
=> [Method,
 MethodSource::MethodExtensions,
 MethodSource::SourceLocation::MethodExtensions,
 Object,
 PP::ObjectMixin,
 Kernel,
 BasicObject]

なので

[25] pry(main)> a =self.method(:puts)
=> #<Method: Object(Kernel)#puts>
[31] pry(main)> a.call 'aaa'
aaa
=> nil

とかできます。(変数にメソッドを入れたりその変数を呼んでメソッドを呼ぶ)

atton commented 10 years ago

Ruby は処理をオブジェクトにできて、 Proc とかもそんな感じです

Method の解説はこことか。まんまオブジェクト、って書かれてたりするので http://docs.ruby-lang.org/ja/2.1.0/class/Method.html

kazuminn commented 10 years ago

変数にメソッドを代入できるのでメソッドはオブジェクトとゆうことですね。

[27] pry(main)> self.method(:puts).class.ancestors => [Method, MethodSource::MethodExtensions, MethodSource::SourceLocation::MethodExtensions, Object, PP::ObjectMixin, Kernel, BasicObject]  なので

これで示されているものは一体なんでしょう。

tompng commented 10 years ago

「オブジェクトのメソッドは、オブジェクトに住んでいるのではなくオブジェクトのクラスに住んでいて」 オブジェクトでは無いとは言っていない案件?

atton commented 10 years ago

変数にメソッドを代入できるのでメソッドはオブジェクトとゆうことですね。

[27] pry(main)> self.method(:puts).class.ancestors => [Method, MethodSource::MethodExtensions, MethodSource::SourceLocation::MethodExtensions, Object, PP::ObjectMixin, Kernel, BasicObject] なので これで示されているものは一体なんでしょう。

これは簡単なので一度自分で調べてみましょう

atton commented 10 years ago

「オブジェクトのメソッドは、オブジェクトに住んでいるのではなくオブジェクトのクラスに住んでいて」 オブジェクトでは無いとは言っていない案件?

ですねー。レシーバがどこか、って話というかメソッドの実態がどこに格納されているか、という話というか。 そうツッコまれると、どうしてメソッドがオブジェクトかどうかの質問になったのかの経緯とか気になりますね

kazuminn commented 10 years ago

@atton- はい、自分で調べてみます。

@tompng あー、読み間違えデス(恥ずかしい)