2012-03-10 106 views
1

好像class_eval(接受一個字符串,它變成代碼),並宣佈新的高清方法的類本質上是一樣的。擴展類(DEF與class_eval)

它們真的是相當的? 每個人有什麼優點和缺點?

回答

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 

無論如何,這些結構應該由他們的目的而使用,如果你進行元編程,然後使用類或實例評估,如果你只是定義一個方法,不要太巧。