blog.waterlow.work

Ruby, Rails, js, etc...

【Ruby】Methodクラス

前回の復習

Procクラスとは?
→メソッドに渡すときに使うブロックとほぼ同義。メソッドにブロックを複数渡したいときは引数にProcオブジェクトを渡してしまえばOK。

9-1 Methodオブジェクト

なんだそれ?
→Procオブジェクト同様メソッドもオブジェクトとして扱えてしまうというだけのこと。

取得方法
これはClassオブジェクトとかクラスインスタンス変数ばりにややこしい。
Objectクラスのmethodメソッドを使う。
メソッドをオブジェクトとしておくにはレシーバと呼び出すメソッド名を用意する。

array = [1, 2, 3]
array_shift = array.method(:shift)
p array_shift.call #=> 1

methodオブジェクトは生成された時にメソッドの処理自体を保持するので、その後メソッドがオーバーライドされても影響を受けない。
arityで引数の数を呼び出せる。

このGWでパーフェクトRubyのメタプロ部分を読み進めて来ましたが、まだ直感的に理解できていないというか、身についている感があんまりない気がします。読んでて純粋に面白いという感じはありますが。今度メタプログラミングも立ち読みして必要なら買ってみます。あとGold用の公式資格教科書が届いたので、いつ受けるか等の作戦も立てていかないとですね!