考慮這個程序,我在參數列表中構造一個數組。雖然有這麼接受一個數組的簽名,這個調用接受列表中的一個: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您還沒有接受答案。我願意加倍努力。我想我完全解決了「爲什麼不叫...?」。我想我完全解決了「調度員如何做出決定?」因爲它與你的具體例子有關。我認爲@斯萊德的回答更廣泛地解決了這個問題。但你寫道:「這並不能解釋我所表現出的行爲。」根據我對他們的回答的評論,我認爲它的確如此。我可以擴大我的答案,「它在哪裏記錄?」通過鏈接到對應斯萊德的答案的文檔。我很感謝你的指導。 :) – raiph