class_eval (コードに変換する文字列を取る) のように見えますが、新しい def メソッドでクラスを宣言することは、本質的に同じことです。
それらは本当に同等ですか?それぞれの長所と短所は何ですか?
class_eval (コードに変換する文字列を取る) のように見えますが、新しい def メソッドでクラスを宣言することは、本質的に同じことです。
それらは本当に同等ですか?それぞれの長所と短所は何ですか?
通常のメソッド定義とブロック評価の間にほとんど違いはありません:
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
とにかく、これらの構造は目的に応じて使用する必要があります。メタプログラミングを行ってからクラスまたはインスタンスの評価を使用する場合、メソッドを定義するだけの場合は、些細なことで賢くなりすぎないでください。