問題タブ [late-binding]
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.
python - map() とリスト内包表記の結果が異なるのはなぜですか?
次のテストは失敗します。
言い換えると:
.net - VB6 プログラマ向けの Option Strict On と .NET
.NET プラットフォームに移行する Visual Basic 6 プログラマーを対象とした Visual Basic 2005 のクラスを準備しています。Option Strict
を常に有効にすることを推奨するかどうかについて、アドバイスをお願いします。
私はもっぱら C スタイルのプログラミング言語、主に Java と C# だけを扱ってきたので、私にとって明示的なキャストは、決してオプションではなかったので、私がしなければならないことを常に期待しています。ただし、コード内の型について過度に明示する必要がないため、実際に時間を節約できるため、遅延バインディングのサポートが組み込まれている言語を使用することの価値を認識しています。これは、動的型付け言語の一般的な普及によってさらに証明されています。
、動的言語ランタイムを使用する .NET プラットフォームでも。
これを念頭に置いて、VB.NET を使用して初めて .NET に取り組み、VB6 のバックグラウンドを持つ人は、コンパイル時の型チェックを使用する必要があるという考え方に入ることが推奨されます。 CLR? それとも、遅延バインディングの利点を享受し続けても「OK」ですか?
python - 字句クロージャはどのように機能しますか?
Javascriptコードの字句クロージャで発生した問題を調査しているときに、Pythonでこの問題が発生しました。
この例では、を注意深く回避していることに注意してくださいlambda
。意外と「444」と書いてあります。「024」を期待します。
この同等のPerlコードはそれを正しく行います:
「024」が印刷されます。
違いを教えてください。
アップデート:
問題はi
グローバルであることではありません。これは同じ動作を示します。
コメント行が示すように、i
その時点では不明です。それでも、「444」と表示されます。
c# - メソッド内でボックス化された値の型を変更する方法
C# でのレイト バインディング呼び出しを簡素化するためのライブラリを構築しようとしていますが、参照パラメーターで問題が発生しています。メソッド呼び出しで使用されるパラメーターを追加する次のメソッドがあります
値型はオブジェクトとしてボックス化され、変更されないため、これは機能しません。例えば:
それはうまくいきません。遅延バインディング呼び出しは成功し、パラメーター (_parameters ) を保持する内部リストは変更されますが、呼び出しの外側の値は変更されません。
この制限を克服する簡単な方法を知っている人はいますか? AddParameter シグネチャは変更できません。遅延バインディング呼び出しと同様に、パラメーターのタイプを事前に知ることはできません (また、呼び出しを行う前にオブジェクト配列内に呼び出しのすべてのパラメーターを挿入します)。
前もって感謝します。
asp-classic - ASPクラシックの変数からメソッドをどのように呼び出しますか?
たとえば、以下のme.testを実行するにはどうすればよいですか?
ASPはメソッド"myvar"を探しますが、見つかりません。PHPでは、単純に$ me-> $ myvarと言うことができますが、ASPの構文では変数とメソッドを区別しません。提案?
これに密接に関連して、ASPクラシックにmethod_exists関数はありますか?
前もって感謝します!
編集:検証クラスを作成していて、パイプで区切られた文字列を介してメソッドのリストを呼び出したいと思います。
たとえば、名前フィールドを検証するには、次のように呼び出します。
特定のフィールドが検証されているすべての方法を示す1行にするというアイデアが好きです。また、文字列の各パイプ区切りセクションは、メソッドの名前です。
より良いセットアップの提案があれば、私はすべての耳です!
vba - VB6 / VBAのCreateObject()に関する質問
私がすることができます:
または私はこれを行うことができます:
CreateObjectに使用する文字列を知るにはどうすればよいですか?たとえば、「スクリプト」を使用する方法をどのように知ることができますか。「Scripting.FileSystemObject」の一部ですか?どこで調べに行きますか?
smalltalk - アーリー バインディングとレイト バインディング: メリットとデメリットの比較
コンピュータ言語の進化について議論するとき、Alan Kay は彼の Smalltalk の最も重要な属性の 1 つはレイト バインディングであると述べています。言語に可鍛性と拡張性を与え、不適切な結合を時間の経過とともにリファクタリングできるようにします。同意しますか?どちらかを使用できるドメインの 2 つのパラダイムのうち、早期バインディングが優勢であると思われる理由を説明する、早期バインディングの利点を補うものはありますか?
javascript、jQuery、jsext、actionscript、php、java、RoR、およびasp.netを使用したWebアプリケーションの実装に基づく私の個人的な経験(信頼できるほど広くも深くもありません)は、遅延バインディングと肥大化の間に正の相関があることを示唆しているようです割引。アーリー バインディングは、いくつかのタイプ セーフ エラーの検出と防止に役立つと確信していますが、オートコンプリート、優れた IDE、および一般的な優れたプログラミング プラクティスも同様です。そのため、リスク回避側が私の合理的な視点を回復する前に、遅延拘束側を応援していることに気付く傾向があります。
しかし、トレードオフのバランスをとる方法については、私には本当に良い感覚がありません。
c# - C# .NET は IDispatch レイト バインディングをサポートしていますか?
質問
私の質問は: C# は遅延バインディング IDispatch をネイティブにサポートしていますか?
顧客がインストールしたバージョンと互換性を保ちながら、Office を自動化しようとしているふりをします。
.NET の世界では、Office 2000 をインストールして開発した場合、すべての開発者とすべての顧客は、現在から最後まで Office 2000 を使用する必要があります。
.NET 以前の世界では、COMを使用して Office アプリケーションと通信していました。
例えば:
1) バージョンに依存しない ProgID を使用する
これは次のように解決されます。
次に、COM を使用して、これらのクラスの 1 つをオブジェクトにインスタンス化するように要求します。
そして今、私たちは競争に出かけています - アプリケーション内から Excel を使用できるようになりました。もちろん、本当にオブジェクトを使用したい場合は、何らかの方法でメソッドを呼び出す必要があります。
私たちの言語に翻訳されたさまざまなインターフェース宣言を手に入れることができました。このテクニックは優れています。
- 早期バインディング
- コードインサイト
- コンパイル型の構文チェック
いくつかのコード例は次のとおりです。
しかし、インターフェイスを使用することには欠点があります。言語に変換されたさまざまなインターフェイス宣言を把握する必要があります。そして、すべてのパラメーターを指定する必要があるメソッドベースの呼び出しの使用に行き詰まっています。
これには、現実の世界で、喜んであきらめるほどの欠点があることが証明されています。
- 早期バインディング
- コードインサイト
- コンパイル時の構文チェック
代わりにIDispatchレイト バインディングを使用します。
Excel の自動化は VB スクリプト用に設計されているため、多くのパラメーターを省略することができます。パラメーターなしではオーバーロードがない場合でも省略できます。
注: Excel の例と、IDispatch を使用する理由を混同しないでください。すべての COM オブジェクトが Excel であるとは限りません。一部の COM オブジェクトは、IDispatch 以外ではサポートされていません。
c++ - C++でのダブルディスパッチ/マルチメソッド
C++ダブルディスパッチについて質問があります。以下のコードでは、2番目のセットの結果を最初のセットの結果と一致させたいと思います。
実際のタイプはわかりませんが(dynamic_castを試していない限り)、オブジェクトがBaseClassタイプから継承されていることはわかっています。これを達成するための最も効率的な(パフォーマンス面での)方法は何ですか?
しばらくグーグルした後、私はダブルディスパッチとロキマルチメソッドについて知りました。Shapeの例で私が抱えている問題は、私のアプリケーションでは、ProcessorとBaseClassが完全に独立しており、相互に呼び出すことができる共通のメソッドがないことです。次に、プロセッサは1つだけです(つまり、プロセッサから継承するものはありません)。
助けてくれてありがとう。
c# - 早期バインディングと遅延バインディング
C# でアーリー/レイト バインディングが発生したときに頭を悩ませようとしています。
非仮想メソッドは常に事前にバインドされています。仮想メソッドは常にレイト バインドされます。コンパイラは、実行時にバインドする実際のメソッドを解決するために追加のコードを挿入し、型の安全性をチェックします。そのため、サブタイプ ポリモーフィズムは遅延バインディングを使用します。
リフレクションを使用したメソッドの呼び出しは、レイト バインディングの例です。コンパイラではなく、これを実現するためのコードを記述します。(例: COM コンポーネントの呼び出し。)
Option Strict がオフの場合、VB.NET は暗黙的な遅延バインディングをサポートします。オブジェクトは、Object 型として宣言された変数に割り当てられると、レイト バインドされます。VB コンパイラは、実行時に正しいメソッドにバインドし、無効な呼び出しをキャッチするコードを挿入します。C# はこの機能をサポートしていません。
私は正しい方向に向かっていますか?
デリゲートを呼び出して、インターフェイス参照を介してメソッドを呼び出すのはどうですか? それはアーリー バインディングですか、それともレイト バインディングですか?