問題タブ [monkeypatching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
626 参照

python - モンキーパッチのstdlibメソッドはPythonの良い習慣ですか?

時間の経過とともに、stdlib制限を克服したり、不足している機能を追加したりするために、Pythonのいくつかのメソッドをオーバーライドする必要があることに気付きました。

いずれの場合も、ラッパー関数を追加し、モジュールの元のメソッドをラッパーに置き換えました(ラッパーは元のメソッドを呼び出していました)。

なぜ私はこれをしましたか?メソッドへのすべての呼び出しが、他のサードパーティモジュールから呼び出された場合でも、私の新しいバージョンを使用していることを確認してください。

モンキーパッチは悪いことかもしれませんが、私の質問は、注意して使用した場合にこれが役立つかどうかです。つまり:

  • 元のモジュールが更新されたときに何も欠落していないことを保証して、元のメソッドを引き続き呼び出します
  • メソッドの元の「意味」を変更していません

例:

このようなことをすることは、私にはまともなオーバーライドのように見えますが、他の人がそれらをどのように見ているか、特に許容できるモンキーパッチと見なされるべきものとそうでないものを確認したいと思います。

0 投票する
3 に答える
297 参照

python - Pythonでポインタ型の動作を取得するにはどうすればよいですか?

関数のリストをテストするテストケースを書きたいと思います。これが私がやりたいことの例です:

達成したいことは次のとおりです。
ステップ1)ローカルメソッド変数をmethod_listの各項目に割り当てます
。ステップ2)メソッドにモンキーパッチを適用します。この例では、mock.Mockオブジェクトを使用しています

実際に発生するのは次のとおりです。
ステップ1)メソッドがmethod_listからアイテムに正常に割り当てられます-OK
ステップ2)メソッドがオブジェクトに割り当てられますMock()-NOK

ステップ2で必要だったのは、method_listからアイテムを取得することでした。たとえばmethod1をMock()オブジェクトに割り当てます。最終的には、methodとmethod1の両方が同じMock()オブジェクトを指すことになります。

私が本質的に行っているのはa=b
a = c
であり、c==bを期待していることに気づきました。

どういうわけかbへのポインタを取得しないと、これは実際には不可能だと思いますか?

0 投票する
2 に答える
336 参照

f# - F# モジュールにモンキー パッチを適用できますか?

簡単な質問です。List モジュールなどに関数を追加したい場合は、その関数を使用して新しい List モジュールを定義できることを読んだところです。

fooこれはメインの List モジュールに追加する効果がありますか、それとも新しい を明示的に開く必要がありますListか? 前者は Ruby の「モンキー パッチ」のようです。後者は拡張メソッドに似ていると思います。

(私はこれを試してみたいと思いますが、コンパイラの近くにはいません。)

0 投票する
4 に答える
39553 参照

python - モンキーパッチPythonクラス

別のモジュールにあるクラスがありますが、変更することはできません。

これは、このファイル以外の場所ではMyClassを変更しません。ただし、このようなメソッドを追加すると

これは機能し、fooメソッドは他のどこでも利用できるようになります。

クラスを完全に置き換えるにはどうすればよいですか?

0 投票する
1 に答える
1761 参照

python - クラスをモンキーパッチで置き換えるにはどうすればよいですか?

ORM クラスを置き換えるにはどうすればよいですか - 再帰が発生しないはずです!!!

問題:
元のクラスにスーパー コールがあり、それが置き換えられると、自己継承が発生し、最大再帰深度超過例外が発生します。
つまり、クラス orm は super(orm, self).... を呼び出しており、orm は元の orm.... を継承する別のクラスに置き換えられています。

パッケージ !

orm.py の内容

addons /init.py の内容

addons/test.py の内容

test_app1.py の内容

run_app.py の内容

出力

似たような質問を見たことがある

0 投票する
4 に答える
7359 参照

ruby-on-rails - Ruby on Rails でモンキー パッチを適用する方法は?

実際の例を使用してみましょう。

WillPaginate::LinkRenderer.to_html メソッドにモンキー パッチを適用したい。

これまでのところ、私は試しました:

  1. フォルダにファイルを作成しました: lib/monkeys/will_paginate_nohtml.rb
  2. config/environments.rb に追加: ファイルの最後に「monkeys/will_paginate_nohtml」が必要
  3. そのファイルの中には、これが私のコードでした:

e

しかし、どういうわけか、デバッガーは通過しません。パッチ適用に失敗したようです。

どんな助けでも大歓迎です、ありがとう!

0 投票する
2 に答える
2890 参照

ruby - ルビーのURI.parseメソッドにモンキーパッチを適用するにはどうすればよいですか

一部の人気のあるブログサイトは通常、URLに角かっこを使用しますが、rubyの組み込みURI.parse()メソッドがそれらをチョークし、次のように厄介な例外を発生させます:http: //redmine.ruby-lang.org/issues/show/ 1466

角かっこでURLを適切に処理する単純なモンキーパッチを作成しようとしています。以下は私がこれまでに持っているものです:

ただし、実行すると、エラーが発生します。

/Library/Ruby/Gems/1.8/gems/activesupport-2.3.8/lib/active_support/core_ext/module/aliasing.rb:33:in alias_method:NameError:undefined method'parse' for module'URI'

URI.parseを正常にモンキーパッチするにはどうすればよいですか?

0 投票する
1 に答える
2088 参照

python - モンキーパッチをDjangoフォームクラスに適用しますか?

フォームクラス(巨大なDjangoアプリのどこか深いところ)が与えられます。

また、フォームクラス自体を拡張または変更せずに、このフォームに別のフィールドを追加したい場合、次のアプローチが機能しないのはなぜですか。

(私の最初の推測では、Djangoが使用するメタクラスハッカーは、フォームクラスが初めて構築されたときにのみ適用されます。そうであれば、これを克服するためにクラスを再宣言する方法はありますか?)

0 投票する
2 に答える
713 参照

ruby-on-rails - Rails でのモンキーパッチ

モンキーパッチは良い開発方法ですか? たとえば、gem をフォークしてフォークされたプロジェクトにパッチを作成するのではなく、いつモンキーパッチを適用する必要がありますか?

0 投票する
2 に答える
2352 参照

ruby - Ruby用のモンキーパッチを書くにはどうすればよいですか?

Rails 3を使用していますが、次のようなエラーが発生します。

この問題を解決するためにモンキーパッチを適用したいと思います。まず第一に:それはどのように見えるはずですか?RubyのソースコードでのArrayクラスのネストについてはほとんど知りません。ガイダンスをいただければ幸いです。