概要
Kernel#class_eval
詳細
Kernel#class_evalについて
Kernel#class_eval
特異クラス(singleton_class)のclass_evalを呼び出すのと同等。
サンプル
# encoding: utf-8 require "active_support/core_ext/kernel/singleton_class" require "tbpgr_utils" class Hoge def hoge "hoge" end end def check_method_define(obj, binding) puts_eval "hoge.respond_to? :hoge", binding puts_eval "hoge.respond_to? :hige", binding end hoge = Hoge.new puts "特異メソッド定義前" puts_eval "hoge.respond_to? :hoge", binding puts_eval "hoge.respond_to? :hige", binding # ActiveSuportを利用しないで記述する場合 # hoge.singleton_class.class_eval do hoge.class_eval do define_method :hige do "hige" end end puts "特異メソッド定義後" puts_eval "hoge.respond_to? :hoge", binding puts_eval "hoge.respond_to? :hige", binding hege = Hoge.new puts "特異メソッド定義後に他のオブジェクトには影響していないことの確認" puts_eval "hege.respond_to? :hoge", binding puts_eval "hege.respond_to? :hige", binding
出力
特異メソッド定義前 hoge.respond_to? :hoge # => true hoge.respond_to? :hige # => false 特異メソッド定義後 hoge.respond_to? :hoge # => true hoge.respond_to? :hige # => true 特異メソッド定義後に他のオブジェクトには影響していないことの確認 hege.respond_to? :hoge # => true hege.respond_to? :hige # => false