Ruby中与Python的output[:-1]等效的是什么?

6
在Python中,如果我想要获取字符串的前n个字符(不包括最后一个字符),我可以这样做:
output = 'stackoverflow'
print output[:-1]

有什么等价的Ruby代码吗?

5个回答

11

我不想过于琐碎,但如果您想更像Python的方法,而不是做"StackOverflow"[0..-2],您可以做"StackOverflow"[0...-1]获得相同的结果。

在Ruby中,使用三个点的范围会排除右侧参数,而使用两个点的范围会包括它。因此,在字符串切片的情况下,三个点更接近Python的语法。


现在,这让我再次阅读了 Range 的文档并第一次了解了三个点。不错! - hermannloose
我对于两个点和三个点的抱怨是很容易混淆或错误计算点的数量,增加了出现错误的机会或使维护变得更加困难。在我看来,使用三个点更多的是一种好奇心,因为它并不能帮助我编写更清晰的代码。 - the Tin Man
@Z.E.D.:3点范围的一个用例是在浮点数上运行case语句。如果您有Ruby 1.9的Pickaxe书籍,请参阅第97页。 - Mark Rushakoff

4

您当前的 Ruby 并不会像您所描述的那样工作:它会截断最后一个字符,但同时也会将字符串反转。

与 Python 代码片段最接近的等效方式是:

output = 'stackoverflow'
puts output[0...-1]

您最初使用了..而不是...(如果您执行output [0..-2],它将起作用);前者是闭合-闭合的,后者是闭合-开放的。在Python中,切片和大多数其他东西都是闭合-开放的。


您可以选择一个范围是否包含其末尾。两个点(0..-2)包括最后一个元素,而三个点形式(0...-1)则不包括它。 - Chuck

2

"stackoverflow"[0..-2] will return "stackoverflo"


1
如果你只想删除字符串的最后一个字符,你也可以使用 'chop' 方法:
puts output.chop

或者

puts output.chop!

1
请注意,如果字符串以\r\n结尾,chop将会删除两个字符。 - Phil Ross

1
如果你只想删除最后一个字符,你也可以这样做。
output.chop

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