簡體   English   中英

Module.new與class_eval

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

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