我正在尝试将数字文字与可以返回的函数的返回值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
语法与安全导航运算符的语法混淆了。