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似乎没有关于此功能的任何内容
两者有什么区别?
&.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 中。