[英]Extending classes in Ruby (def versus class_eval)
似乎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
無論如何,這些構造應按其用途使用,如果您進行元編程,然后使用類或實例求值,如果您只是定義方法,則不要太瑣碎。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.