1

class_eval (コードに変換する文字列を取る) のように見えますが、新しい def メソッドでクラスを宣言することは、本質的に同じことです。

それらは本当に同等ですか?それぞれの長所と短所は何ですか?

4

1 に答える 1

1

通常のメソッド定義とブロック評価の間にほとんど違いはありません:

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

とにかく、これらの構造は目的に応じて使用する必要があります。メタプログラミングを行ってからクラスまたはインスタンスの評価を使用する場合、メソッドを定義するだけの場合は、些細なことで賢くなりすぎないでください。

于 2012-03-10T22:22:15.847 に答える