Ruby:如何递增一个可能为nil的数字?

18

如何在 Ruby 中简化这个问题:

x = (x || 0) + 1

?


4
在我看来,这看起来非常不错(好吧,x2 = (x || 0) + 1会更好),比“魔法”to_i转换更加明确。 - tokland
你还能更简单吗?为什么认为现有解决方案还有改进的空间? - user229044
3个回答

30

您可以使用to_inil转换为0

或者您也可以使用succ

x = x.to_i.succ

x = x.to_i + 1


7
这取决于您认为什么是简单的。您可以使用:
(x ||= 0) += 1

但我认为我会接受你的版本。

如果x是一个散列值,请参阅此回答,了解在散列中使用默认值的方法。


似乎不起作用。括号中的部分 (x ||= 0) 返回一个整数,而不是 x。您不能使用 += 运算符更改整数。 - Jussi Hirvi

3

你的代码可能会出现错误:

x = 'a'
x = (x || 0) + 1 #can't convert Fixnum into String (TypeError)

有可能使用to_i结合+1或者succ(参见Chandras答案

但是也许只有succ更适合您:

x = x.succ if x.respond_to?(:succ)

正确答案取决于您的输入数据和您的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接