Ruby(+ =)添加AND赋值运算符和初始nil值

时间:2014-08-19 23:56:50

标签: ruby

是否有更好的(红宝石方式)来实现以下目标:

if a.nil?
  a = 1
else
  a += 1
end

4 个答案:

答案 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

...............