我在 Rubymonk 遇到一个问题,我必须在执行操作之前测试数组是否为“nil”(添加到数组中的项目,但这与问题并不真正相关)。然而,我注意到,当我这样做时
ary.nil? ? nil : ary.map {|x,y=0| x + y }
代码可以工作,但如果我这样做的话
ary.nil? ? **return** nil : ary.map {|x,y=0| x + y }
事实并非如此。
但是,如果我这样做
if ary.nil?
**return **nil
else
ary.map {|x,y=0| x + y }
end
为什么“**return **nil”在一种情况下起作用,而在另一种情况下不起作用? (粗体仅用于强调全文)
我希望“回归”在这两种情况下都能发挥作用。
return
这样的表达没有多大意义。您可能希望在绘制地图之前显式返回:
def foo(ary)
return nil if ary.nil?
ary.map { |x| x + 1 }
end
或者解决这个问题的更明智的方法是使用安全访问运算符,这将产生 nil
is
ary
is
nil
。
ary&.map { |x| x + 1 }