問題タブ [method-dispatch]
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.
java - 値nullが引数として使用されている場合のJavaのオーバーロードされたメソッド呼び出しの解決
あいまいなメソッドエラーを生成する代わりに、Java が実行method(char[] a)
されmethod(null)
ているのはなぜですか?method(Object a)
静的メソッドを使用して文字列を作成しようとするとString.valueOf()
...この状況に直面します。以下の自明ですぐに実行できる例を参照してください。
String クラスのソースを確認した後、String.valueOf(Object) メソッドが null-safe であることがわかりました!!したがって、String.valueOf(null)
実際にはString.valueOf(Object)
メソッドを呼び出しているのではなく、別のオーバーロードされたメソッドを呼び出しString.valueOf(char[])
ています。すべての配列( にもかかわらずbase type
)がオブジェクトであることを知っています。
私は自分のテストを作成しているので、これはかなり確信しています。
私が正しいと仮定すると...(ちなみに、これは質問の一部です...)、「null」をObject または char[] インスタンスに。
Java はダブル ディスパッチ (つまり、引数の実際の型を調べて呼び出すメソッドを解決すること) をサポートしていません。では、null を char[] として取得する決定を下すために、ここではどのような規則を使用しているのでしょうか? 私の人生を通して、nullは他の種類の抽象化よりもオブジェクトの「もの」に近いと思います。
「more」はどのような型に null 値を関連付けますか?
回答お待ちしております!!
ご挨拶。
ビクター
PD: HPO (謙虚な個人的意見) として... 特に最初の例を見ると、混乱することに同意しませんか? おそらく、これは Java コミュニティで議論を行うための良い出発点です。ええと、ありがとう!
r - 引数が欠落しているメソッドのディスパッチ
特定の S4 メソッドの後続の S4 メソッドに引数値を明示的にError: argument "<argname>" is missing, with no default
ディスパッチするときの古典的なエラー (以下の例を参照)を回避するにはどうすればよいですか。
例
大局
- method
foo()
を呼び出すメソッドがありbar()
ます。 x
どちらのメソッドも、引数およびに依存しますy
。- メソッドは、引数およびを明示的な方法で
foo()
ディスパッチします: .x
y
bar()
bar(x=x, y=y)
foo()
ここで重要な点は、渡された引数の一部またはすべてbar()
が欠落していても気にしたくないということです。
ジェネリック メソッド
メソッドbar()
方法foo()
前述のように、foo()
渡された引数の一部またはすべてbar()
が欠落していても気にしたくありません。bar()
明示的な方法ですべてを渡すことになっています:
メソッド def は一見良さそうに見えますが、呼び出し時にx
またはy
が欠落していると失敗します。
回避策
これは、これまでに思いついた唯一の回避策です。
if ... else
それは機能しますが、すべてのステートメントのために、私はそれがあまり好きではありません. 「if-else ロジック」全体は、 のさまざまなメソッドの仕様に既に含まれていbar()
ます。結局のところ、メソッド ディスパッチャを最初に用意することの要点はそこにあるのではないでしょうか。したがって、私はステートメントを「望ましくない作業」と見なし、より良い方法を探しています。
もちろん、すべての「重要な」引数のデフォルト値として使用することに頼ることもできますが、できるだけ関数内ではなくにNULL
依存したいと思います。missing()
is.null()
java - パラメータの Java コンパイル時のディスパッチは壊れていますか?
Java がコンパイル時の型に基づいてメソッドをディスパッチすることは既に知っています。ただし、それが機能することを期待しているケースがありますが、機能しません。
次の簡単な例を考えてみましょう。
および呼び出しコード:
なぜ Java は、呼び出すのが最も適切であると考えているのでしょうbar(Object... objects)
か? 私は compileTime にマップを持っているので、すべてがうまくいくはずです! なぜ明示的にダウンキャストする必要があるのですfoo.bar((Map<String, Object>)map);
か??
jquery - Python: GET (Method-Dispatcher) が AJAX によって呼び出されたかどうかを区別する
同じオーバーロード メソッド GET を区別できないという問題に悩まされています。私は Method-Dispatcher を使用しているので、GET、PUT、POST、および DELETE メソッドしかありません。
アヤックスはいつも通り
Webページを更新するたびにGETメソッドが呼び出されますが、このメソッドもajaxで呼び出したいです
別の解決策は次のとおりです(もちろん、まだ機能していません)
ruby - キーワード引数を使用してメソッドのアリティを決定する
JSON データに基づいてメソッドを動的に呼び出す Ruby アプリケーションを開発しています。大まかに:
上に示したように、引数を取らないメソッドもあれば、キーワード引数を取るメソッドもあります。Ruby 2.1.0 (私が開発している場所) では、arity
上記の両方の方法は0
. ただし、send(cmd,params)
常に、パラメーターを取らないメソッドに対してエラーが発生します。
send
必要な場合はキーワード引数を正しく渡し、そうでない場合は省略するにはどうすればよいですか?
c# - インターフェイス型は CLR によってどのように読み込まれますか?
Concrete 実装で初期化されていない場合、CLR はインターフェイス型をロードしますか?
実装 FooImpl を持つインターフェース IFoo を検討する
例えば
とは対照的に
2 番目のケースでは、CLR は IFoo タイプのみをロードしますか? また、FooImpl を継承する別の型がある場合 (例: FooImpl2)
このコードは FooImpl2 から開始し、継承階層をたどって IFoo インターフェイスをロードしますか? また、IFoo の MethodTable には FooImpl2 のメソッド テーブルへの直接のポインターが含まれますか、それとも中間の実装型 (つまり FooImpl) を介してリダイレクトされますか。
r - ディスパッチ前の型変換
ジェネリック関数を定義しています
これには 2 つのインスタンスが必要です: genfun.default (x が行列の場合) genfun.formula (x が式の場合)
これは問題なく動作しますが、ディスパッチが行われる前に、x が文字列の場合は強制的に数式にするようにしたいと思います。
残念ながら、以下は機能しません
genfun.character のようなインスタンスをさらに定義せずにこれを処理する方法はありますか?
事前にご協力いただきありがとうございます。
一番、
マーティン
r - ...または同等のS3メソッドディスパッチ
同じクラスのオブジェクトのリストのメソッドを定義するにはどうすればよいですか?
例えば。
ここで...
は、すべて同じクラスを持つオブジェクトの任意の長さのリストになりたいと思い、それらを使って何かをしたいと考えています (実際のクラスのユースケースに固有の、それらを結合します)。
...
メソッドディスパッチに送信できるクラスがないことは私には理にかなっています。new_method.list
ただし、存在しない/存在しないため、単純な書き直しも機能しません