Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Module | define_method

概要

Module#define_method(*name) -> nil

詳細

インスタンスメソッド name を定義する。

ブロックを与えた場合、メソッドの実行時に指定しがブロックが レシーバクラスの
インスタンスの上で BasicObject#instance_eval されます。

サンプルコード
require 'tbpgr_utils'

class Hoge
  %w{hoge hige hage}.each do |method_name|
    define_method method_name do |msg|
      "#{method_name}-#{msg}"
    end
  end
end

hoge = Hoge.new
bulk_puts_eval binding, <<-EOS
hoge.hoge('message')
hoge.hige('message')
hoge.hage('message')
EOS

__END__
下記はTbpgrUtils gemの機能
bulk_puts_eval

https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

$ ruby module_define_method.rb
hoge.hoge('message') # => "hoge-message"
hoge.hige('message') # => "hige-message"
hoge.hage('message') # => "hage-message"