参数在Ruby中传递

时间:2013-11-07 14:36:25

标签: ruby

我有以下代码段

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的方式。有什么想法吗?

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的方式。