string.next的相反操作是什么?

24

在Ruby中是否有一个方法与String#succ相反的功能?

如果你运行succ或者next,你会得到下一个字符:

a = "4.4.10"
a.succ
=> "4.4.11"

我想要相反的:

a = "4.4.10"
a.previous
=> "4.4.09"

这是可能的吗?我在 Ruby 的文档中很难找到这个。也许它不存在?


我不知道关于这个的情况。但是自己实现应该不难。 - Sergio Tulentsev
1
分割点,选择最后一段,转换为整数,减少,重新组装字符串。就像是3行代码 :) - Sergio Tulentsev
1
@SergioTulentsev,真正的实现并不那么简单:"sergio".next => "sergip""sergio!".next => "sergip!",尽管OP想要的似乎很简单。 - Dogbert
2
这并不是那么容易的事情,当你往上升级时,你只需要增加版本号,但是你可能会跳过一些版本,比如Rails中的3.2 -> 4.0。你该如何处理呢?如果是"4.4.00".previous,你该怎么办?是"3.3.99"吗?你确定吗? - Louis Kottmann
@Baboon:是的,'3.3.99'。你还有其他逻辑选项吗? - Sergio Tulentsev
显示剩余3条评论
1个回答

39

4
太好了!非常感谢。我得试一试看它的效果如何! - Sean Larkin
我只是在想这个问题,这是一个很好的解释为什么如果.prev是一个实际的方法,它将非常难以实现或预测。 - Nmuta
我对这个解释有点困惑。从图表上看, succ 似乎也不明确。第二个 succ 箭头应该不需要吗? - lobati
1
对于 Ruby 来说,它是 .pred - Pablo
1
请见 https://docs.ruby-lang.org/en/2.7.0/Integer.html#method-i-pred。 - Pablo

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