市田です。

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')