問題タブ [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 投票する
5 に答える
773 参照

ruby - Ruby演算子をエイリアス化できますか?

これを機能させる方法に興味があります:

me変数に何かが追加されたときに、オブジェクトが再定義されたメソッドを使用するようにしたいと思います。

これを実行しようとすると、になりsyntax error, unexpected ':', expecting kENDます:<<

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

python - Django プロジェクトでリバースを再定義することは可能ですか?

サードパーティのアプリであっても、URL が逆になるたびに実行する必要があるカスタム ロジックがいくつかあります。私のプロジェクトはマルチテナント Web アプリであり、テナントは URL に基づいて識別されます。テナント ID を含まない有効な URL は 1 つもありません。

私はすでに の周りにラッパー関数を持っていますが、reverseインストールされているすべてのアプリにそれを使用するように指示する方法が必要です。ラッパー アラウンドreverseは、スレッド ローカルを使用して、結果の URL に識別子を挿入します。この関数を のデコレータとして記述できますreverseが、実際の装飾をどこで行うべきかわかりません。

適度に堅固な制約: 私は既に 3 つのサードパーティ製アプリを使用していますが、おそらくさらに追加する予定です。ソリューションでは、これらすべてのサードパーティ アプリのソース コードを変更する必要はありませんもっと簡単な方法があれば、複数のサードパーティ ソース ツリーの上にパッチを維持するという考えは好きではありません。reverse装飾されたドキュメンテーションを非常に明確にすることができます。

元の質問: のすべての呼び出しに適用されることを保証するような変更をどこで行うことができますreverseか?

考えられる別の質問: すべての URL (サードパーティ アプリによって生成されたものを含む) が確実にテナント ID を取得できるようにするためのより良い方法は何ですか? ところで、URL へのテナント ID の埋め込みを除いて、これを処理するためのより良い方法を受け入れることができます。その決定は現在かなり固まっています。ありがとう。

ありがとう。

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

ruby - Rubyの実行/起動時に自動的にクラスを要求する

いくつかの Ruby クラスでモンキー パッチを適用していますが、Ruby を実行するたびに自動的に含まれるようにしたいと考えています。

例えば:

String にメソッド trim を追加しました。私はこれを行うことができるようにしたい:

ruby -e 'puts " aaaa ".trim'

私はこれをしたくありません:

ruby -e 'require "monkey.rb"; puts " aaaa ".trim'

Ruby を起動するたびにモンキー パッチを含める方法はありますか? アーブはどうですか?

ありがとう!

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

jquery - 「モンキーパッチ」の背後にある正式な設計パターンは何ですか?

ここでコア CS の質問: ガンマなどにリストされているデザイン パターンのうち、(もしあれば) モンキーパッチをカバーするのはどれですか? さらに、どのクラスの問題に対して、モンキーパッチとサブクラス化が適切ですか? コア ライブラリ クラスのバグにパッチを当てることはその 1 つですが、他にもありますか? stackoverflow でのモンキーパッチについては、多くの騒ぎと騒ぎを耳にします。ほとんどの人はそれについて強い不安を抱いているようですが、プログラマーとして、機能の一般的なビットをカプセル化し、それらをレールのオブジェクト モデルに含める機能が本当に気に入っています。

たとえば、thinkbot-paperclip を例にとると、今日存在するモンキーパッチのアプローチに対して、なぜそれをサブクラス化したいのでしょうか?

ありがとう、-エリック

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

string - 「文字列」テーブルを「拡張」する-それを行う方法は?それもいい考えですか?

特定の文字列の最初の文字を大文字にする必要があるLuaライブラリを開発しています。したがって、次の関数を作成しました。

これは当初、私のライブラリでのみ使用される「内部」関数でした。

これで、ユーザーがこの機能を使用したい場合があることに気付きました。

質問1 文字列テーブルを拡張することを考えていますが、どのように進めるかがわかりません。これを行うだけで十分ですか、それとももっと「ルア指向」の方法がありますか?

質問2 文字列をモンキーパッチするのもいいのではないかと思います。代わりに、パブリックな「資本化」機能を提供する必要がありますか?

編集-将来誰かがこれを見つけた場合に備えて、はるかに単純な「大文字化」機能が文字列レシピページに表示されます。

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

ruby - ルビーのスレッドセーフでない自動ロードに適用できる回避策は何ですか?

この質問で述べたように、スレッド内での自動ロードは問題を引き起こす可能性があります。どのような回避策を適用できますか?

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

ruby-on-rails - Rails のカスタム フォーム要素

だから私はRailsが初めてで、カスタムフォーム要素を追加する標準的な方法が何であるかを理解しようとしています. 現在、私がやっている方法は非常に厄介です。

しかし、私はこれを見てきました。

ここから)

FormBuilder を拡張することは、ダックパンチするよりも優れたソリューションのようです。FormBuilder クラスの一部をカスタム クラスに直接コピーする必要のない、これを行う他の方法はありますか?

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

oop - (モンキー)パッチを当てるか、(モンキー)パッチを当てないか、それが問題だ

私たちが使用しているいくつかのパッケージの予期しない/望ましくない動作について、同僚と話していました。私たち側には明らかな副作用のない簡単な修正 (または少なくとも回避策) がありますが、彼は関連するコードにハード パッチを適用してパッチをアップストリームに投稿することで、関連するコードを拡張することを強く提案しました。実際、新しいビルドごとに自動的に適用されるいくつかのパッケージの特定のバージョンに対するパッチを維持しています。主な議論は、「醜い」回避策や壊れやすいモンキー パッチとは対照的に、これは正しいことであるということです。一方、私は純粋さよりも実用性を優先し、少なくとも (重大な) バグ修正以外の場合は、「パッチなし」>「モンキー パッチ」>「ハード パッチ」というのが私の一般的な経験則です。

したがって、(ハード)パッチ、モンキーパッチ、または希望どおりに機能しないサードパーティのパッケージを回避する方がよい時期について、コンセンサスがあるかどうか疑問に思っています。それは主に、パッチの理由 (バグの修正、動作の変更、不足している機能の追加など)、特定のパッケージ (サイズ、複雑さ、成熟度、開発者の応答性)、その他の何かに関係しているのか、それとも一般的なルールがなく、ケースバイケースで判断すべき?

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

python - cPickle を使用して 2.4 で array.array をピッキングする

私はpython 2.4で構築されたプロジェクトに取り組んでいます(これは組み込みのpythonプロジェクトであるため、使用するpythonのバージョンを選択できません)。アプリケーション全体で、array.arrayデータを保存するために使用します。

array.arrayオブジェクトの酸洗いのサポートは、2.5 でpickle(および) に追加されました。cPickle純粋な python pickle クラス (配列を処理するために Pickler/Unpickler をサブクラス化) を使用する場合、2.4 で実行可能な回避策がありますが、これは cPickle では機能しません (パフォーマンスの問題のためにこれが必要です)。

助言がありますか?

編集 - 解決策:

これは、機能しているように見える最終的なコードです (提案に感謝します):

0 投票する
5 に答える
50382 参照

python - 1匹のサルがPythonで関数にパッチを当てる方法は?

別のモジュールの関数を別の関数に置き換えるのに問題があり、頭がおかしくなっています。

次のようなモジュール bar.py があるとします。

そして、次のような別のモジュールがあります。

結果が得られると思います:

しかし、代わりに私はこれを取得します:

私は何を間違っていますか?