3

現在、Redmine 用の独自のプラグインを作成しています。そのコアに次のメソッドが見つかりました(正確なコードではありませんが、アイデアは保持されています):

def method(foo, bar, array)
    # Do some complex stuff with foo and bar

    @array = array
    @array.uniq!
    @array = @array[0:3]

    # Do some complex weird stuff with @array
end

この '3' を '6' に変更する必要があります。これは、配列内の 3 つの要素ではプラグインの目的には不十分だからです。手動で変更でき、何もクラッシュしませんが、Redmine のコアにパッチを適用したくありません。そこで、このメソッドを独自の実装に置き換えるプラグインを作成しています。これは同じことを行いますが、3 つが 6 つに変更されています。

ここに問題があります。このファイルが更新されると、古いメソッドが使用されます。実行時にメソッド内に何が書き込まれているかを確認する方法はありますか (たとえば、サーバーの起動時)。

ところで、メソッド全体をオーバーライドせずに、この定数を直接変更する方法はありますか?

4

2 に答える 2

1

ファイルにアクセスできる場合は、pry gem を使用してソース コードを確認できます。または、そのような gem がなくても、 を実行してメソッドの場所を手動で確認し、puts method(:foo).source_locationその部分を読み取ることができます。

動作を変更する最も簡単な方法は、メソッド全体をオーバーライドすることです。

于 2013-09-24T23:27:24.867 に答える
1

いいえ、Ruby で実行時にメソッドのソース コードを取得する方法はありません。一部の Ruby 実装では、ソース コードを取得する方法が存在する場合もありますが、これは信頼性も移植性もありません。結局のところ、ソース コードが Ruby であるという保証さえありません。ほとんどの実装では、Ruby 以外の言語でメソッドを記述できるためです (たとえば、YARV では C、JRuby では Java など)。

于 2013-09-24T22:26:53.703 に答える