我正在尝试开发一个Redmine插件,我开始阅读documentation,并学习了很多Ruby和很多Ruby on Rails。 (我是PHP / Python / js家伙)
然后我开始浏览其他插件,然后找到了this code。我找不到足够的信息来完全理解这行代码的工作原理:
Issue.send(:include, RedmineRequireIssueAllowedToChangeAssignee::Patches::IssuePatch)
我知道在IssuePatch中有一些要覆盖或添加到Issue类的东西。
然后我found this,解释发送的使用,这让我感到困惑,为什么不只使用Issue.include? p>
主要问题是:这个方法include
在哪里定义,它做了什么?
答案 0 :(得分:7)
您不能只执行include
因为它是私有方法,因此您使用send
来绕过ruby可见性控制。使用send
,您可以调用任何方法,甚至是私有方法(如本例所示)。
此方法包括已定义的内容以及它的作用是什么?
它被定义为Module#include,并且当使用模块作为参数调用时,它会将该模块的所有实例方法附加到接收器(在您的情况下为Issue
类)。这是Ruby中非常常见的习语。