[英]Module.new with class_eval
這是一個很大的提交。 但我希望你專注於這個改變塊。 http://github.com/rails/rails/commit/d916c62cfc7c59ab6411407a05b946d3dd7535e9#L2L1304
即使不了解代碼的完整上下文,我也無法想到我將使用的場景
include Module.new {
class_eval <<-RUBY
def foo
puts 'foo'
end
RUBY
}
然后最終結果是在根上下文中(self include Module.new
之前)添加了一個名為foo
的方法。
如果我取出Module.new
代碼,如果我在這種情況下只留下class_eval
,我將在self
有一個名為foo
的方法。
我錯過了什么
如果您仔細閱讀文檔,您會發現只有在尚未定義的情況下,包含模塊才會在其中添加方法。 因此,如果方法已經存在,這種方法不會覆蓋該方法。
這個ActiveRecord代碼已被問到另一個問題,它收到了一個很好的答案。 https://stackoverflow.com/a/3473479/420947
但是,這里簡化的eval字符串消除了編寫此代碼的動機,這就是為什么它看起來令人困惑。 在未更改的代碼中,塊綁定捕獲用於反映關聯的局部變量: #{reflection.name}.clear
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.