引数リストに配列を作成するこのプログラムを考えてみましょう。配列を受け取り、署名がありますが、これはリストを受け入れるものを呼び出します。Perl 6のマルチディスパッチはどのルーチンを使用するかをどのように決めるのですか?
foo([ 1, 2, 3 ]);
multi foo (Array @array) { put "Called Array @ version" }
multi foo (Array $array) { put "Called Array \$ version" }
multi foo (List $list) { put "Called List version" }
multi foo (Range $range) { put "Called Range version" }
私は予想外のルーチンからの出力を得る:私は、そのいずれかを、他の署名のコメントを解除した場合
Called Array $ version
Called List version
なぜ(Array @array)
バージョンを呼び出さないのですか?ディスパッチャーはどのように決定しますか(そしてそれはどこに文書化されていますか)。
cf 'say( - > Array @ {})。signature.params [0]。タイプ ' – Christoph
@briandfoy私はノイズの低減のために逆転に関する私のコメントを削除しました。あなたの確認のコメントも削除してください。後で私はこれを削除します。 :) – raiph
briandfoyあなたは答えを受け入れていません。私はもっと頑張ります。私は完全に "なぜそれが呼び出されないのか..."と言いました。私は、「ディスパッチャーはどのように決定を下していますか?それはあなたの特定の例に関連しているからです。私は@ Sladeの答えがより広くそれに対処したと思う。しかし、あなたは「これは私が示した行動を説明するものではありません」と書いています。彼らの答えに対する私のコメントによると、私はそれがそうだと思います。私は自分の答えを「どこに文書化されていますか? Sladeの答えに対応するdocにリンクしてください。私はあなたの指導に感謝します。 :) – raiph