4

我正在尝试开发一个Redmine插件,我开始阅读文档,并学习了很多 Ruby 和很多 Ruby on Rails。(我是 PHP/Python/js 人)

然后我开始浏览其他插件,我发现了这段代码。我找不到足够的信息来完全理解这行代码的工作原理:

Issue.send(:include, RedmineRequireIssueAllowedToChangeAssignee::Patches::IssuePatch)

我知道在 IssuePatch 内部有一些要覆盖或添加到问题类的东西。

然后我发现了这个,解释了send的使用,这让我很困惑,为什么不只使用Issue.include?

主要问题是:这个方法在哪里include定义,它有什么作用?

更新:相关问题

4

1 回答 1

7

你不能仅仅include因为它是一个私有方法,所以你使用send它来规避 ruby​​ 可见性控制。send您可以调用任何方法,甚至是私有方法(如本例所示)。

这个方法在哪里定义,它有什么作用?

它被定义为Module#include,并且当使用模块作为参数调用时,它将该模块的所有实例方法附加到接收器(在您的情况下是Issue类)。这是 Ruby 中一个非常非常常见的习语。

于 2012-11-23T16:28:13.067 回答