gpt4 book ai didi

ruby - 为什么 s[n..-1] 在 ruby​​ 中工作?

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:11 24 4
gpt4 key购买 nike

我是 ruby​​ 的新手。最近,我想从所述字符串的第 n 个字符到末尾提取字符串的一部分。

做像 s[n,(s.size - n)] 这样的事情对我来说似乎很不优雅,所以我问了几个 friend 。

有人建议我试试 s[n..-1],果然行得通,但他不能给我一个很好的理由说明它应该行得通。我发现它的工作原理相当令人费解,正如 irb1.9 的以下输出应该解释的那样:


> s = "0123456789"
=> "0123456789"
> s[2..-1]
=> "23456789"
> (2..-1).to_a
=> []

如您所见,范围对象 2..-1 是空的——它没有任何成员,如果您将值从 2 向上增加到 -1,这绝对是您所期望的。这与范围对象应如何工作的文档一致。

用范围索引字符串的文档清楚地说:“如果给定一个范围,则返回包含在范围给定的偏移处的字符的子字符串”——但这是一个空集。

我在“The Ruby Programming Language”或 Ruby 文档中也找不到使用 s[n..-1] 等索引字符串的示例,但可以找到在其他官方来源中没有这方面的例子。然而,这似乎是民间传说,即使手册中没有任何内容表明您可以通过这种方式对具有范围的字符串进行索引,并且即使该范围没有成员也可以获得您得到的结果,它仍然有效。

然而,我的 friend 是对的,它有效。

那么,有人可以解释一下为什么这对我有用吗?我也非常想知道它的工作原理是否是 MRI/YARV 的侥幸,或者这是否绝对适用于所有 Ruby 实现,如果是这样,它在哪里工作?

编辑添加:

下面的回答者声称只有范围的 beginend 属性对这些目的很重要,但我在 TRPL 或 Ruby 文档中找不到相关文档。答案还声称确实有这种“混合符号”范围索引的例子,但我能找到的唯一一个是在混合范围索引显示产生 nil 的上下文中,而不是一段字符串。因此,我觉得这个答案并不令人满意。

编辑添加:

看来正确答案是这确实是 Ruby 文档中的一个缺陷。

编辑添加:

该错误已由 Ruby 文档团队修复:请参阅 https://bugs.ruby-lang.org/issues/6106

最佳答案

这是文档中的错误。

自从 Pickaxe 书像 meteor 一样降落在 matz 实际上正确且全面的 HTML 文档之后,Ruby 的文档就变得很糟糕。这是一个有时仍然让我恼火的话题。您问题的答案,来自 1.4:link

self[nth]

Retrieves the nth item from an array. Index starts from zero. If index is the negative, counts backward from the end of the array. The index of the last element is -1. Returns nil, if the nth element is not exist in the array.

self[start..end]

Returns an array containing the objects from start to end, including both ends. If ... is used (instead of ..), then end is not included. if end is larger than the length of the array, it will be rounded to the length. If start is out of an array range , returns nil. And if start is larger than end with in array range, returns empty array ([]).

-1 是数组的最后一个索引,为方便起见。

关于ruby - 为什么 s[n..-1] 在 ruby​​ 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com