初めてのRuby − 9.6.2 method_missing
わんくまの掲示板で、定義済みのクラスのメンバ関数を、より短い名前で呼ぶようにしたいという質問あり。
class Graphics g { void Image_Load() { } void Image_Draw() { } };
とあってGraphicsクラス内部にクラスor構造体 aImage を設けて
aG.aImage.Draw()
などと呼びたいとのこと。
一つ一つ置き換えるのは手間がかかるなと思ってて、初めてのRubyの9.6.2に出会う。
class MyClass # 元のクラスのイメージ def Image_Draw(*arg) puts "Image_Draw called with (#{arg})" end def Image_Load(*arg) puts "Image_Load called with (#{arg})" end end class MyClass # 再度クラスを開いてメソッド定義 def method_missing(name, *arg) eval("Image_#{name}(#{arg})") # eval何ぞを使ってみる end end a = MyClass.new a.Image_Draw a.Image_Draw(1) a.Image_Load a.Image_Load(2) a.Draw a.Draw(3)
evalなんぞを使って引数ごと元のメソッドを呼び出してみた。