簡體   English   中英

在Ruby中擴展類(def與class_eval)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM