1
class_eval(文字列をコードに変換する)のように見えて、新しいdefメソッドでクラスを宣言するのは本質的に同じことです。Rubyでのクラスの拡張(def対class_eval)
本当に同じですか? それぞれの長所と短所は何ですか?
class_eval(文字列をコードに変換する)のように見えて、新しいdefメソッドでクラスを宣言するのは本質的に同じことです。Rubyでのクラスの拡張(def対class_eval)
本当に同じですか? それぞれの長所と短所は何ですか?
あり、通常の方法の定義とブロックの評価の間にほとんど差です:
bench(1000000) do
class A; def test; end end
end
=> 2.5 sec
class B; end
bench(1000000) do
B.class_eval{ def test; end }
end
=> 2.75 sec
は、しかし、ここで評価した文字列との大きな違いです:
bench(1000000) do
B.class_eval("def test1; end")
end
=> 24.02 sec
をとにかくが、これらの構造は、その目的で使用されなければならない、もしあなたはメタプログラミングを行い、クラスやインスタンスを評価することをお勧めします。メソッドを定義するだけの場合は、あまりにも些細なことで賢明にならないでください。