【发布时间】:2017-06-19 02:24:40
【问题描述】:
考虑这个程序,我在参数列表中构造了一个数组。虽然有一个接受 Array 的签名,但这会调用接受 List 的签名:
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].type
标签: signature raku multidispatch