問題タブ [proxy-object]

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 投票する
0 に答える
1001 参照

python - 外部の Python ライブラリ クラス/関数を新しい Python モジュールにラップする

いくつかのクラス (例: クラス A、クラス B) を持つ外部の python ライブラリ (例: Lib1) を使用しています。そのライブラリの上にラッパー コンポーネントを作成して、将来、そのライブラリを他のライブラリに置き換えたい場合でも、アプリケーションでコードを変更する必要がないようにします。このコンポーネントの初期実装では、Lib 1 と同じクラスとメソッドでこのコンポーネントを作成しても問題ありません。

クラス A にメソッド m1 と m2 があり、クラス B にメソッド m3 と m4 があり、m3 と m4 がクラス A のインスタンスをパラメーターとして受け取る場合。メソッド m1 と m2 を持つクラス Wrapped_A と、そのメソッド m3 と m4 を持つクラス Wrapped_B で終わることは望ましくありません。

Wrapped_A と Wrapped_B のすべてのメソッドをラップする必要がないように、汎用プロキシ/デリゲート オブジェクトまたはクラスを実装する方法はありますかクラス A が m3 と m4 に渡される)。

私はpythonが初めてで、デコレータとメタプログラミングを理解しようとしましたが、それは役に立ちませんでした。また、現在の要件は、クラスまたはそのメソッドに新しいロジックを追加することではなく、外部ライブラリ オブジェクト/メソッドへの呼び出しを委任するプロキシ オブジェクト/メソッドを作成することだけです。

助けてくれてありがとう !

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

javascript - JavaScript の取り消し可能なプロキシとは何ですか?

なぜプロキシを取り消す必要があるのですか? の実用的なアプリケーションを提供していただけますProxy.revocable()か?

MDN Proxy.revocable()のドキュメントに基づいて、ガベージ コレクションが許可されていることを理解しています。しかし、Proxy オブジェクトを削除しただけでは、ガベージ コレクションも許可されませんか?

補遺: この質問に何か問題がある場合は、その内容をお知らせください。喜んで言い換えるか、追加情報を追加します。

@エイミー:

次のように取り消し可能なプロキシを作成できるため、これは不要な組み込み機能のように思えました。

ただし、オブジェクトからのアクセスを取り消すことはできますが、Proxy オブジェクト内のオブジェクトへの内部参照を削除することはできないため、ガベージ コレクションが実際に問題になっているようです。そうでもなければ...

そのため、2 層のプロキシを作成することで、ガベージ コレクションと取り消しが可能なプロキシを作成できます。では、なぜ組み込まれているのでしょうか。使いやすさ?または、何か不足していますか?ただし、完全にガベージ コレクションが可能なわけではありません。null プロトタイプを持つオブジェクトへの参照を含むシン ラッパーがまだ存在します。