Практически нет разницы между обычным определением метода и оценкой блока:
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
В любом случае, эти конструкции должны использоваться ихДля целей, если вы выполняете метапрограммирование, а затем используете оценку класса или экземпляра, если вы просто определяете метод, не будьте слишком умны в мелочах.