Ruby でインスタンスメソッドを定義する手段
特定のクラスオブジェクトに対してインスタンスメソッドを定義したい場合にどういう手段があるのかまとめてみた。
クラス定義から定義する
多分普通のやり方。
単純にクラス定義時にメソッドを定義します。
class String def twice self + self end end "homu".twice # => "homuhomu"
define_method を使う
もう1つは define_method
を使うやり方。
define_method
は動的にメソッドを定義する場合に使うことが多いのかなー。
def def_twice # String クラスに対して #define_method を利用してメソッドを定義する # この時に #define_method は private メソッドなので、#send を経由して呼び出すことに注意 String.send :define_method, :twice do self + self end end # この時にメソッドが定義される def_twice "homu".twice # => "homuhomu"
この時に注意するのは #define_method
メソッドは private
なので #send
メソッドを経由して呼び出す必要がある。
さて、他にインスタンスメソッドを定義する手段ってあるかな?