我正在尝试将数字文字与可以返回的函数的返回值nil或数字进行比较。考虑一下:
def unreliable
[nil, 42].sample
end
unreliable > 10
这将在 50% 的时间内爆炸NoMethodError: undefined method '>' for nil:NilClass。所以我尝试了这个:
unreliable&.(:>, 10)
这种方法可以达到nil我的预期,但是当我unreliable返回时我得到了这个42:
NoMethodError: undefined method `call' for 42:Fixnum
我怀疑这与每个只允许一个实例存在的怪癖有关Numeric,请参见此处。我知道我可以做到这一点:
foo = unreliable
foo && foo > 10
但是有没有办法将安全导航运算符与数字 and :>, :<, :==, :+, :-, :/,:*等一起使用?
编辑:我的问题的重点Numeric是红鲱鱼。请参阅@Jörg 的回答。我将 Rails 的try语法与安全导航运算符的语法混淆了。