-1

我有以下代码段

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。任何想法?

4

2 回答 2

1

2 是list数组的第一个元素。Ruby 将'm'=>1,'t'=>2,'w'=>3其视为一个参数(Hash实例),因此第三个参数(p3)是list数组的第一个元素,因为您list使用 splat 运算符(*)传递,将数组转换为参数的“列表”。

于 2013-11-07T14:41:01.820 回答
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 的方式。

于 2013-11-07T14:42:25.590 回答