メタプログラミングRuby 第三章 method_missing
前回、動的メソッドを説明しました。今回は method_missingをまとめていきます。
mehod_missing
メソッド呼び出しの際に見つからなかった際に呼び出されるメソッドです。 以下にコード例を書いておきます。
class TestMethod end obj = TestMethod.new obj.ghost(2) # undefined method `ghost' for #<TestMethod:0x007fab87884cc8> (NoMethodError)
method_objectは BasicObject(Objectクラスのメソッド kernelメソッドを持たない) で定義されているのでほぼ全てのオブジェクトに対応しています。
使い方
“ドキュメント”を確認すると、 ↓のように書くようです。
def method_missing(method_name [, *args [, &block]])
重要な箇所は以下の点です。 - 第一引数は method名 (method_name) - 第二引数は 引数 or block (*args blocks)
コード例を以下に記載します。
class TestMethod def method_missing(method,input) puts method puts input end end obj = TestMethod.new obj.ghost(2) # ghost 2
method_missingメソッドは メソッド名を引数に持つのでメソッドに応じた処理を 記述することも可能です。
レシーバに対応するメソッドがなく、method_missingで対応した処理を ゴーストメソッド と呼ぶ。
ひとまず、三章ブログはここで一段落としておきます。
動的プロキシ等、残った重要トピックは気が向いた時に追記していきます。
次回は 第四章ブロック やります!