看起来像class_eval(将一个字符串变成代码)并用新的def方法声明该类基本上是一回事。
它们真的相同吗? 各自的优点和缺点是什么?
答案 0 :(得分: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
无论如何,这些结构应该按照它们的用途使用,如果你进行元编程然后使用类或实例评估,如果你只是定义一个方法,那就不要太聪明了。