問題タブ [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.
ruby - Ruby の「オープン クラス」はカプセル化を破りますか?
Ruby では、プログラマーは定義済みのクラスを変更できます。したがって、本当に下手なプログラマーは次のようなことをする可能性があります。
明らかに、これほど愚かな人はほとんどいないでしょうが、事前定義されたクラスへのより微妙な変更が、既に機能しているコードに問題を引き起こす可能性があるという考えは、カプセル化の原則に違反しているように思えます。
4 つの質問:
- まず、これは実際、カプセル化のオブジェクト指向の原則に違反していますか?
- 第二に、プログラマーとして、変更されていないバージョンのクラスで作業していることをコードで保証できる方法はありますか?
- 第三に、何らかの理由で、コード内でクラスを「開く」必要がありますか?
- 最後に、このようなことは、大規模な本番コーディング環境でどのように処理されるのでしょうか? 言い換えれば、プログラミング業界の人々は、他の人が使用するコードで実際にこれを行っているのでしょうか? または、そうでないとしても、どこかのプラグイン作成者が、プログラムの重要な部分を台無しにするようなことをしていないことをどのように保証しますか?
これはやや主観的な質問であることは承知していますが、このいわゆる「モンキー パッチ」について、より広いプログラミング コミュニティがどのように感じているかを知りたいと思っています。
ruby-on-rails - Railsに自動ロードされるコードにモンキーパッチを適用する方法は?
Railsエンジンに次のようなモンキーパッチを適用しています:
初めて Web サイトにアクセスしたときは、少なくとも開発モードでは機能しましたが、2 回目はパッチが存在しなかったようです。エンジン(ベンダー/にインストールされている)を自動リロードし、コードをリロードしないのはRailsだと思います。これは Rails 2.3 です。
私のコードもリロードされるようにする方法はありますか?
ruby - インスタンスメソッドにモンキーパッチを適用する場合、新しい実装からオーバーライドされたメソッドを呼び出すことができますか?
クラスのメソッドにモンキーパッチを適用しているとしましょう。オーバーライドされたメソッドからオーバーライドされたメソッドを呼び出すにはどうすればよいですか?つまり、少し似ていますsuper
例えば
javascript - Google アナリティクスの Cookie をローカル/セッション ストレージに変換する
更新 http://jsfiddle.net/musicisair/rsKtp/embedded/result/
Google アナリティクスは、そのドメインへのすべてのリクエストとともに送信される 4 つの Cookie を設定します(およびそのサブドメインをオフセットします)。私が知る限り、実際にそれらを直接使用するサーバーはありません。__utm.gif
これらはクエリ パラメータとしてのみ送信されます。
明らかに、Google アナリティクスは値の読み取り、書き込み、および動作を行い、GA トラッキング スクリプトで使用できるようにする必要があります。
だから、私が疑問に思っているのは、次のことが可能かどうかです。
- Cookie を書き込んだ
__utm*
後、Cookie をローカル ストレージに書き換えます。ga.js
ga.js
実行後にそれらを削除しますga.js
それらを読み取る直前に、ローカルストレージからのCookieをCookie形式に書き換えます- 最初からやり直す
または、Cookie の読み取り/書き込み部分を開始する前に、ローカル ストレージを使用するようにモンキー パッチを適用します。ga.js
明らかに、Cookie を削除する方法を大幅に変更する場合は__utm*
、Analytics の Async バリアントも使用する必要があります。
反対票を投じたのは、質問をしなかったためだと思います。ドー!
私の質問は次
のとおりです。上記のように実行できますか?
もしそうなら、なぜそれが行われていないのですか?
HTML/CSS/JS
YSlow、PageSpeed、および Chrome の監査をほぼ完璧なスコアで通過するデフォルトのボイラープレート テンプレートがあります。ローカル ストレージをサポートするブラウザで、Google Analytics から残りの Cookie バイトを絞り込む方法を本当に探しています。
python - 組み込みの Python 型にカスタム メソッド/属性を追加できますか?
たとえば、helloWorld()
Python の dict タイプにメソッドを追加したいとします。これはできますか?
JavaScript には、このように動作するプロトタイプ オブジェクトがあります。多分それは悪い設計であり、dict オブジェクトをサブクラス化する必要がありますが、それはサブクラスでのみ機能し、将来のすべての辞書で機能するようにしたいと考えています。
JavaScript では次のようになります。
これは、より多くの例を含む便利なリンクです— http://www.javascriptkit.com/javatutors/proto3.shtml
ruby - Ruby の基本クラスに「モンキー パッチ」を適用するより良い方法はありますか?
私が書いているジオメトリ ライブラリでは、スカラーによるベクトルの乗算をサポートしたいと考えています。これは、メソッドvector * scalar
を定義するだけで簡単に実行できます。Vector#*
ただし、scalar * vector
すべてのFixnum#*
、Bignum#*
およびFloat#*
メソッドをサポートするには、モンキー パッチを適用する必要があります。それを達成するために、これらの各クラスに次のコードを使用しています。
これを達成するためのより良い方法があるかどうか、またはこれを行う際に潜在的な問題があるかどうか疑問に思っていますか?
groovy - groovy のオブジェクトにプロパティまたはメソッドを動的に追加する
Groovyでオブジェクトにプロパティまたはメソッドを動的に追加することは可能ですか? これは私がこれまでに試したことです:
しかし、次の例外が発生します。
ruby - instance_variableがnilなのはなぜですか?(2行のコード)
存在しないキーの自動インクリメント番号を格納するハッシュを作成しようとしています。これを行うには、他にも脆弱性の低い方法があることを私は知っています。私の質問は:なぜ私のインスタンス変数はそれほど惨めに失敗するのですか?
python - Pythonで__init__モジュールにモンキーパッチを適用する方法は?
私は知っています、私は知っています、それは汚れています。__init__
Python モジュールのモジュールをハイジャックして、自分のモジュールに置き換えることが可能かどうかを知りたいです。
django libがinitプロセスの一部を開始して構成でクラッシュするのを防ぐ必要があるため、私はそれを求めています。
はい、django lib を修正してパッチを送り返す方がよいでしょう。はい、私はそれについて著者と連絡を取り合っています。しかし、今のところ、迅速な修正が必要です。
python - Python print への日時スタンプの追加
私が依存している大規模なライブラリの動作をデバッグしようとしています。このライブラリは、多くのソース ファイルを通じてデバッグ プリント ステートメントを散在させています (それほど多くはありません)。問題は、これらの debug print ステートメントのすべてではないにしてもほとんどが日付/時刻スタンプを含んでいないため、アプリケーション レベルでの障害をライブラリ コード自体の障害と関連付けることが難しいことです。
私が見ている失敗に関係していると思われるすべてのデバッグ出力のソース コードを変更するのではなく、組み込みの Python 印刷「関数」に一時的にモンキー パッチを適用して、すべての出力に接頭辞を付けることができるのではないかと考えました。タイムスタンプ。
組み込みのprint は、私が使用している Python 2.6 環境の関数ではないため、これが可能かどうかはわかりません。誰かがこれを行った、または Python への別のフックを使用して同様の結果を達成した場合は、あなたのアドバイス、またはこの問題を解決するためのコードに感謝します。