我正在尝试将数字文字与可能返回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
但是,有没有办法在数字和
:>
, :<
, :==
, :+
, :-
, :/
, :*
等操作符中使用安全导航运算符呢?
编辑:我的问题中关注的
Numeric
是一个红鱼,参见 @Jörg 的答案。我混淆了 Rails 的 try
语法和安全导航运算符的语法。