Rubyコードがロードされる順序にどのように影響しますか?
-
22-08-2019 - |
質問
同僚がFixnumクラスにモンキーパッチを適用し、+メソッドを再定義して加算ではなく減算するとします。 ジェネラコディセタグプレ
問題は、+メソッドの元の機能にアクセスしたいということです。したがって、同じソースファイルで彼の前にこのコードをドロップします。+メソッドのエイリアスを「original_plus」に変更してから モンキーパッチを適用します。 ジェネラコディセタグプレ
これで、original_plusを介して+メソッドの元の機能にアクセスできます ジェネラコディセタグプレ
しかし、私が知る必要があるのはこれです:
モンキーパッチをロードする前に、変更したのと同じソースファイルに貼り付ける以外に、このエイリアスをロードする方法はありますか?
私の質問には2つの理由があります:
- 私がこれを行ったことを彼に知られたくないかもしれません
- エイリアスがモンキーパッチより下になるようにソースファイルが変更された場合、エイリアスは目的の結果を生成しなくなります。
解決
もちろんです。ソースファイルが必要になる 前に、コードにアンチモンキーパッチを貼り付けるだけです。 ジェネラコディセタグプレ
他のヒント
モンキーパッチは、既存のクラスを拡張して新しい機能を追加するのに便利です。既存の機能の動作を変更するためのモンキーパッチはクレイジーです!
真剣に、あなたはあなたの同僚と話すべきです。
あなたの例のように、彼がその振る舞いを変更するためだけに既存のメソッドを再定義した場合、あなたは彼に話しかけ、既存の振る舞いを保存するためにalias_method_chain
を使用するようにアドバイスする必要があります。
所属していません StackOverflow