是否有更好的(红宝石方式)来实现以下目标:
if a.nil?
a = 1
else
a += 1
end
答案 0 :(得分:3)
如果a
只能是nil
或整数,那么
a = a.to_i + 1
答案 1 :(得分:1)
a = (a || 0) + 1
也有效。
答案 2 :(得分:1)
如果你知道 a 永远不会是真的,假的,或其他不能被强制转换为整数的东西,你可以使用这个Ruby习语:
a ||= a.to_i.succ
更健壮的构造可能是:
a = a.respond_to?(:succ) ? a.succ : 1
它不是那么漂亮,但它更有可能做正确的事情"在你的情况下。您也可以询问是否a.is_a? Integer
,但如果您有一个可递增但不是真正整数的对象,则无法利用duck typing。
总是不止一种方式做这样的事情,所以你的里程可能会有所不同。
答案 3 :(得分:0)
a = a ? a+1 : 1
...............