[ruby-list:50483] Re: [質問] define_method の使い方
From:
Toshihiko Ichida <dogatana@...>
Date:
2017-02-10 22:31:48 UTC
List:
ruby-list #50483
市田です。
On 2017/02/07 19:53, yamataka@u08.itscom.net wrote:
>> このあたりは『メタプログラミングRuby』が参考になります。
>
> 購入して、今勉強中です。
・レシーバとメソッド
・クラス「定義」の「実行」
・インスタンス変数とクラスインスタンス変数
などについて楽しく読める良書だと思います。
> 結局、method_missing を用いることで、似たような method の定義
> 対応にしました。
インスタンスメソッドの中でメソッドを定義する方法として
define_singleton_method を使う方法もあります。
以下ご参考まで。
ではでは
=============
class Foo
def intialize
setup_method
end
def setup_method
get_api_list.each do |api_name|
define_singleton_method(api_name) do |*args|
puts "method :#{api_name} called #{args.inspect}"
end
end
end
def get_api_list
%w(one two three)
end
end
obj = Foo.new
puts "methods of #{obj} # before"
p obj.methods(false)
obj.setup_method
puts "methods of #{obj} # after"
p obj.methods(false)
puts 'call method'
obj.one
obj.one(1, true, 'abc')