Closed kazuminn closed 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
とかできます。(変数にメソッドを入れたりその変数を呼んでメソッドを呼ぶ)
Ruby は処理をオブジェクトにできて、 Proc とかもそんな感じです
Method の解説はこことか。まんまオブジェクト、って書かれてたりするので http://docs.ruby-lang.org/ja/2.1.0/class/Method.html
変数にメソッドを代入できるのでメソッドはオブジェクトとゆうことですね。
[27] pry(main)> self.method(:puts).class.ancestors => [Method, MethodSource::MethodExtensions, MethodSource::SourceLocation::MethodExtensions, Object, PP::ObjectMixin, Kernel, BasicObject] なので
これで示されているものは一体なんでしょう。
「オブジェクトのメソッドは、オブジェクトに住んでいるのではなくオブジェクトのクラスに住んでいて」 オブジェクトでは無いとは言っていない案件?
変数にメソッドを代入できるのでメソッドはオブジェクトとゆうことですね。
[27] pry(main)> self.method(:puts).class.ancestors => [Method, MethodSource::MethodExtensions, MethodSource::SourceLocation::MethodExtensions, Object, PP::ObjectMixin, Kernel, BasicObject] なので これで示されているものは一体なんでしょう。
これは簡単なので一度自分で調べてみましょう
「オブジェクトのメソッドは、オブジェクトに住んでいるのではなくオブジェクトのクラスに住んでいて」 オブジェクトでは無いとは言っていない案件?
ですねー。レシーバがどこか、って話というかメソッドの実態がどこに格納されているか、という話というか。 そうツッコまれると、どうしてメソッドがオブジェクトかどうかの質問になったのかの経緯とか気になりますね
@atton- はい、自分で調べてみます。
@tompng あー、読み間違えデス(恥ずかしい)
メタプログラミング(初版 p53)ページに 「オブジェクトのメソッドは、オブジェクトではなくオブジェクトのクラスに住んでいて、クラスのインスタンスメソッドとも呼ばれる。」 と記述されています。
がメソッドはオブジェクトではないのですか?