ruby 中数组的 &.each 和 .each 之间的区别?

vis*_*nth 2 ruby arrays

irb(main):007:0> %w[1 2 3 4 5]&.each { |a| puts a }
1
2
3
4
5
=> ["1", "2", "3", "4", "5"]
irb(main):008:0> %w[1 2 3 4 5].each { |a| puts a }
1
2
3
4
5
=> ["1", "2", "3", "4", "5"]
Run Code Online (Sandbox Code Playgroud)

双方&.each.each似乎给了相同的结果

ruby-doc似乎没有关于此功能的任何内容

两者有什么区别?

Seb*_*lma 7

&.each是一个操作符和一个方法。each只是一种方法。

&.,称为“安全导航操作符”,允许在接收者为零时跳过方法调用。如果调用被跳过,它返回 nil 并且不评估方法的参数。

因此,如果接收器是nil(在您的示例中并非如此),它只会返回,nil因为它不响应each

nil&.each
# nil
Run Code Online (Sandbox Code Playgroud)

否则,调用对象中的任何未定义方法都会抛出NoMethodError. 这就是你在第二个例子中会得到的:

nil.each
# ...
# NoMethodError (undefined method `each' for nil:NilClass)
Run Code Online (Sandbox Code Playgroud)

有关安全导航操作符的文档在调用方法文档中。而因为each它在Array 中