考虑这个程序,我在参数列表中构造了一个数组。虽然有一个接受数组的签名,但这调用了接受列表的签名:
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 )
版本?调度员如何做出决定(以及记录在哪里)?