似乎 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
无论如何,这些结构应该按其用途使用,如果您进行元编程然后使用类或实例评估,如果您只是定义一个方法,请不要太聪明。