問題タブ [multiple-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.
reflection - Julia 0.6で特定の「メソッド」オブジェクトが特定の「タプル」型を受け入れるかどうかを確認するにはどうすればよいですか?
目標は、メソッドと型のタプルを受け取り、true を返す関数を定義することです。これらの型は、そのメソッドの有効な入力です。機能ではなく、method
accepts(meth::Method, types::Tuple)::Bool
これがこのためのテストセットです
julia はパブリック リフレクション API をあまり持っていないので (私が以前に不満を持っていたように)、潜在的にすべてのパッチ バージョンを壊す可能性のあるコードには問題ありません。
この質問の目的は、 InterfaceTesting.jl のこの部分を 0.5 から 0.6に更新するために何をする必要があるかを理解できるようにすることです。
私の古いコードが機能しなくなった原因は、三角形のディスパッチを可能にするために導入された変更です。したがって、triangular
テストは合格するのが難しいものです。
raku - パラメータのない Perl 6 マルチから選択できますか?
引数以外の値に基づいて multi を選択できますが、少なくとも 1 つの引数が必要なのでwhere
、そこに を入れることができます。
誰かがパラメータをまったくとらないマルチ間でディスパッチするために使用したトリックを思い出したようです。たとえば、show-env
散らばりたいルーチンがあり、デバッグ条件を設定した場合にのみ何もしません。私が示したようにそれを達成することはできましたが、それはあまり満足のいくものではなく、他の場所で見たと私が想像する賢いものではありません:
オプションの名前付きパラメーターを使用して同様のことを行うこともできますが、それはさらに満足のいくものではありません。
もちろん、この単純な例でこれを行うこともできますが、これは面白くありません。
polymorphism - 抽象型からフィールドにアクセスするときにジュリア型が不安定
abstract type
(ジュリアv0.6で)のフィールドにアクセスするときの型の不安定性について質問があります
。
型階層があり、そのすべてが同じインスタンス変数を共有しているとします。期待される変数を欠く新しいサブタイプを誰かがいつでも定義できるため、フィールドに正しくアクセスすることが正しいことは型が不安定であり、保証されていないことを私は知っています。しかし、メンバーアクセスを関数でラップしても、アクセスは依然として型が不安定で、その理由がわかりません。
単純な型階層があるとします。
直接アクセスする代わりにa.x
、関数バリアでラップします。
このメソッドによるアクセスは、 の型が であると推測できるため、型が安定していることに注意してa
くださいT1
。
ただし、getX
コンパイラが事前に変数の型を認識できないコンテキストで使用すると、型が不安定になります。
の本体をインライン化し、getX
それを本質的に に置き換えたことに
注意してくださいtmp.x::Int64
。getX
これには驚きました。先ほど見た同じ定義の 2 つのインスタンス化のうちの 1 つにディスパッチすることを期待していたので、型がわかっているのでアサートは必要ありません。
getX
が実際に抽象基本型に対してのみ定義されている場合、これはある程度意味があると思いましたAT
-私が想像している方法でディスパッチするメソッドはありません。そこでgetX
、次のようにサブタイプごとに特定のメソッドを生成するように再定義してみました。
しかし、それは実際には同一の定義であり、何も変わっていません:
どうすればこれを機能させることができますか?
c++ - C++ でのポリモーフィング ツリーのエレガントな比較
ポリモーフィック オブジェクトのツリーがあります。2 つのツリーをトラバースし、ノードを比較する必要があります。ノードのタイプが異なる場合、それらは等しくありません。次の階層を考えてみましょう。
これらの機能を実装する方法を知っています:
この関数をどのように実装する必要があるかについて質問しています:
ビジター パターンをエレガントに使用するequalTree
にはどうすればよいですか?equalNode
c++ - 多形バイナリ関数
、、、の3 つの形状クラスCircle
がありSquare
、ConvexPolygon
関数があります。
多態的な関数が欲しい
上記の形状固有のメソッドを呼び出して、交差のマトリックスを埋めます。
C ++でこれを正確に行うことは不可能だと思いますが、交差行列を計算するコードを変更せずに新しい形状タイプを追加できる限り、他のソリューションで問題ありません。
python - 複数のディスパッチでデフォルトパラメータを使用するには?
(この回答multipledispatch
に基づいて)を使用して、デフォルトのパラメーターで関数をオーバーロードしています
アイテムfunction()
に値を渡さずに呼び出しているときbool
私は得る
NotImplementedError: 関数の署名が見つかりませんでした
完全なスタック トレース:
注:私は@dispatch
すべて一緒にドロップして、次のようなことができることを知っています
ただ、今の体制を維持できるかは疑問です。
どうすれば修正できますか?