[英]Why is class_eval sometimes used when re-opening the class could work?
我已經在Rails應用程序中以以下形式遇到了一些代碼:
ThirdPartyLibrary::Foo.class_eval do
def bar?
@bar_field == 'true'
end
end
我想知道為什么他們不只是做
class ThirdPartyLibrary::Foo
def bar?
@bar_field == 'true'
end
end
當您沒有任何要傳遞給新代碼的內容時,使用class_eval
有什么優勢?
class ThirdPartyLibrary::Foo do
def original?
true
end
end
ThirdPartyLibrary::Foo.class_eval do
def baz?
true
end
end
ThirdPartyLibrary::Foo.original? #=> true
ThirdPartyLibrary::Foo.baz? #=> true
class ThirdPartyLibrary::Foo
def bar?
true
end
end
ThirdPartyLibrary::Foo.original? #=> undefined method
ThirdPartyLibrary::Foo.baz? #=> undefined method
ThirdPartyLibrary::Foo.bar? #=> true
class_eval向現有的類“添加”某些東西,您的第二個示例僅定義了new類,並覆蓋了之前的所有內容。 例如,當您要猴子補丁或擴展庫時使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.