4

私はRedmineプラグインを開発しようとしています。ドキュメントを読み始め、たくさんのRubyとたくさんのRubyonRailsを学びました。(私はPHP / Python / jsの人です)

それから私は他のプラグインを調べ始めました、そして私はこのコードを見つけました。このコード行がどのように機能するかを完全に理解するのに十分な情報が見つかりません。

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

IssuePatchの中には、Issueクラスをオーバーライドまたは追加するものがあることを理解しています。

それから私はこれを見つけ、sendの使用法を説明しました、そしてそれは私を混乱させます、なぜIssue.includeだけを使用しませんか?

主な質問は、このメソッドはどこでinclude定義され、何をするのかということです。

更新:関連する質問

4

1 に答える 1

7

プライベートな方法だからというだけではできないincludeので、sendルビーの可視性制御を回避する方法を使用します。これsendを使用すると、プライベートメソッド(この場合のように)を含め、任意のメソッドを呼び出すことができます。

このメソッドインクルードはどこで定義され、何をしますか?

これはModule#includeとして定義され、パラメーターとしてモジュールを使用して呼び出されると、そのモジュールのすべてのインスタンスメソッドをレシーバー(この場合はIssueクラス)に追加します。これは、Rubyで非常に一般的なイディオムです。

于 2012-11-23T16:28:13.067 に答える