我有以下代码段
list=[2,4,6,8]
def tester(p1,p2,p3,*p4)
print p1
print '***'
print p2
print '***'
print p3
print '***'
print p4
end
tester('first','m'=>1,'t'=>2,'w'=>3,*list)
输出:
first***w3m1t2***2***468
我没有按照p3
分配2
的方式。有什么想法吗?
答案 0 :(得分:1)
2是list
数组的第一个元素。 Ruby将'm'=>1,'t'=>2,'w'=>3
视为一个参数(Hash
实例),因此第三个参数(p3)是list
数组的第一个元素,因为您使用splat运算符传递list
(* ),将数组转换为参数的“列表”。
答案 1 :(得分:1)
您将扩展的列表数组传递给您的方法(我知道*为splat),因此它与调用
相同tester('first','m'=>1,'t'=>2,'w'=>3,2,4,6,8);
或换句话说
tester('first',{'m'=>1,'t'=>2,'w'=>3}, 2, 4, 6, 8);
在你的方法定义中,*p4
并不意味着最后一个数组,它意味着遗留下来的任何东西。所以说,我认为前三个参数被分配给p1,p2和p3,其余的被分配给p4。这就是p3变成2的方式。