这个问题在这里已经有了答案:
What does &. (ampersand dot) mean in Ruby?
(5 个回答)
2年前关闭。
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"]
两个
&.each
和 .each
似乎给出了相同的结果ruby-doc似乎没有关于此功能的任何内容
两者有什么区别?
最佳答案
&.each
是运算符和方法。 each
只是一种方法。
&., called “safe navigation operator”, allows to skip method call when receiver is nil. It returns nil and doesn't evaluate method's arguments if the call is skipped.
所以,如果接收者是
nil
(在您的示例中并非如此)它只会返回 nil
因为它不响应each
:nil&.each
# nil
否则,在对象中调用任何未定义的方法都会抛出
NoMethodError
。 .这就是您将在第二个示例中得到的内容:nil.each
# ...
# NoMethodError (undefined method `each' for nil:NilClass)
有关安全导航运算符(operator)的文档位于 Calling Methods文档。而对于
each
它在 Array .
关于arrays - ruby 中数组的 &.each 和 .each 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59208524/