問題タブ [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.

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

java - Double Dispatch/Visitor パターンを使用せずに Java の静的メソッドのディスパッチを回避する

Fooこれらのメソッドを提供するクラスを使用しています:

Java はレシーバー以外の引数で静的にディスパッチするため、 my value(これは ですが、Object動的な type を持つ可能性がありますGoo) を渡すだけではなく、JVM に依存して「正しい」メソッドを動的に選択することはできません。

これは私の現在の(醜い)回避策です:

(オーバーロードされたメソッドを含むクラス)のコードを変更せずにFooこれを行うより良い方法はありますか?

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

java - null 引数を指定した Java メソッドのディスパッチ

null引数として直接渡すか、Objectを割り当てたを渡すかによって、(明らかに)違いが生じるのはなぜですか? null

つまり、(コメントアウトされた) への 2 番目の呼び出しが にfoo(...)ディスパッチされないのはなぜfoo(Object)ですか?

更新: Java 1.6 を使用しています。Hemal のコードは問題なくコンパイルできましたが、私のコードはまだコンパイルできません。私が見る唯一の違いは、Hemal のメソッドは静的であるのに対し、私のメソッドはそうではないということです。しかし、なぜこれが違いを生む必要があるのか​​ 本当にわかりません...?

更新 2:解決済み。クラスに別のメソッド foo(Runnable) があったため、ディスパッチャは最も具体的なメソッドを 1 つだけ選択することができませんでした。(Hemal の 2 番目の回答の私のコメントを参照してください。) ご協力いただきありがとうございます。

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

java - Java 動的バインディング

試験の練習をしていて、完全に道に迷ってしまうサンプル問題を見つけました。次のコードについて、出力が何であるかを見つけます。

私は自分のアイデアを念頭に置いていましたが、Java を実行すると、まったく異なる結果が得られました。

最初のいくつかはOKですが、その後は本当に理解できません。誰でもこの問題について良い説明がありますか?

ありがとう

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

ruby - Ruby: オブジェクト参照を介して関数を呼び出すにはどうすればよいですか?

この不自然な例を考えてみましょう:

eating_methodここで、いくつかの引数を指定して のターゲットを呼び出したいと思います:

Rubyでこれを行う正しい方法は何ですか?

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

apache-flex - データグリッドの Itemclick イベント

この問題は、データグリッド内のアイテムをクリックすると、テキスト領域にアイテムの値が表示されますが、ここではコンポーネントが分離されているため、イベントをディスパッチする必要があると要約できます。

/////////////////////////////////////////////// /////////////

これは私のメイン MXML アプリケーション ファイルです。

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

objective-c - -performSelector: の使用 vs. メソッドの呼び出しのみ

私はまだObjective-Cに慣れていないので、次の2つのステートメントの違いは何ですか?

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

java - オーバーロードはコンパイル時のポリモーフィズムです。本当に?

オーバーライドとオーバーロードの構文上の違いは知っています。また、オーバーライドは実行時のポリモーフィズムであり、オーバーロードはコンパイル時のポリモーフィズムであることも知っています。しかし、私の質問は次のとおりです。「オーバーロードは本当にコンパイル時のポリモーフィズムですか?メソッド呼び出しは本当にコンパイル時に解決しますか?」. 私の主張を明確にするために、クラスの例を考えてみましょう。

すべてのメソッドgreetMe(), greetMe(String name), wishLuck()が公開されているため、すべてオーバーライドできます (オーバーロードされたものを含む)。例えば、

ここで、次のスニペットを検討してください。

このgetRandomGreeter()メソッドはランダムGreeterオブジェクトを返します。のオブジェクト、または のようなそのサブクラスのいずれかを返すことができGreeterます。クラスファイルを使用するか動的にロードしてオブジェクトを作成し、リフレクション(リフレクションで可能だと思います)またはその他の可能な方法を使用してオブジェクトを作成します。これらのメソッドはすべて、サブクラスでオーバーライドされる場合とされない場合があります。そのため、コンパイラは特定のメソッド (オーバーロードされているかどうか) がオーバーライドされているかどうかを知る方法がありません。右?また、ウィキペディアは仮想機能について次のように述べています。FancyGreeterGraphicalGreetergetRandomGreeter()newGreeter

Java では、すべての非静的メソッドはデフォルトで「仮想関数」です。オーバーライドできないキーワード final でマークされたメソッドと、継承されないプライベート メソッドのみが非仮想です。

仮想関数は動的メソッド ディスパッチを使用して実行時に解決され、すべての非プライベート、非最終メソッドは (オーバーロードされているかどうかにかかわらず) 仮想であるため、実行時に解決する必要があります。右?

では、コンパイル時にオーバーロードを解決するにはどうすればよいでしょうか? または、私が誤解していること、または見逃していることはありますか?

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

python - When should I use @classmethod and when def method(self)?

While integrating a Django app I have not used before, I found two different ways to define functions inside the class. The author seems to use them both distinctively and intentionally. The first one is the one that I myself use a lot:

The other one is the one I never use, mostly because I do not understand when and what to use it for:

The classmethod decorator in the python documentation says:

A class method receives the class as the implicit first argument, just like an instance method receives the instance.

So I guess cls refers to Dummy itself (the class, not the instance). I do not exactly understand why this exists, because I could always do this:

Is this just for the sake of clarity, or did I miss the most important part: spooky and fascinating things that couldn't be done without it?

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

wcf - WCF が RESTful 要求をディスパッチするメソッドを見つける

次のコントラクトを使用してWCF RESTサービスを実装するとします。

現在、承認を行うためにパイプラインに HttpModule がありますが、そのコードはリクエストがどのメソッドにディスパッチされるかを知る必要があります。WCF によって呼び出されるメソッドのシグネチャを見つけるにはどうすればよいですか?