我不明白这一点:
2.0.0-p598 :003 > a=[1,2,3]
=> [1, 2, 3]
2.0.0-p598 :004 > (a << 1).uniq!
=> [1, 2, 3]
2.0.0-p598 :005 > a
=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我不明白为什么实际上要修改a。我猜想括号会使uniq方法适用于括号中的所有内容,而不是变量。有人可以解释吗?
根据文档
a << 1
Run Code Online (Sandbox Code Playgroud)
返回a本身。
您的代码两次修改了数组。
首先1将其压入数组,a并a从中返回(a << 1)。然后,您可以调用uniq!它。
这是代码逐步执行的操作,无需链接:
irb(main):001:0> a = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> a << 1
=> [1, 2, 3, 1]
irb(main):003:0> a
=> [1, 2, 3, 1]
irb(main):004:0> a.uniq!
=> [1, 2, 3]
irb(main):005:0> a
=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
请注意,该方法的名称末尾带有感叹号(bang!)。这是Ruby中修改其调用对象的方法的命名约定。您可以使用uniq而不是uniq!并且可以不a修改数组。
irb(main):001:0> a = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> a << 1
=> [1, 2, 3, 1]
irb(main):003:0> a
=> [1, 2, 3, 1]
irb(main):004:0> a.uniq
=> [1, 2, 3]
irb(main):005:0> a
=> [1, 2, 3, 1]
Run Code Online (Sandbox Code Playgroud)