jpe*_*lli 4 activerecord ruby-on-rails
我正在尝试开发一个Redmine插件,我开始阅读文档,并学习了很多Ruby和很多Ruby on Rails.(我是PHP/Python/js家伙)
然后我开始查看其他插件,我发现了这段代码.我找不到足够的信息来完全理解这行代码的工作原理:
Issue.send(:include, RedmineRequireIssueAllowedToChangeAssignee::Patches::IssuePatch)
Run Code Online (Sandbox Code Playgroud)
我知道在IssuePatch中有一些要覆盖或添加到Issue类的东西.
然后我发现了这个,解释了send的使用,这让我感到困惑,为什么不使用Issue.include?
主要问题是:这个方法在哪里include定义,它做了什么?
更新:相关问题
你不能只是include因为它是一个私有方法,所以你使用send它来绕过ruby可见性控制.有了send你可以调用任何方法,甚至是私立的(在这种情况下).
这个方法在哪里定义,它做了什么?
它被定义为Module #include,当使用模块作为参数调用时,它会将该模块的所有实例方法附加到接收器(在您的情况下为Issue类).这是Ruby中非常常见的习语.
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |