2

对于给定的字符串:

string = "hello world"

我想使用索引返回一个字符串:

string2 = string[-4..2]
string2 = "orldhel"

为什么红宝石返回:

string2 = ""

PS - 我将索引的开头和结尾迭代 1 并且初始字符串索引可能不一定是负数。

4

1 回答 1

3

不可能在一个范围内。但是您可以将其拆分为两个有效范围。

string = "hello world"

string[-4..-1] + string[0..2] # => "orldhel"

您可以编写一个接受单个反转范围的函数并执行此操作。我会把它留给你作为练习。

更新(不要在你的实际代码中使用它)

class String
  alias_method :old_brackets, :[]

  def [](idx)
    if idx.is_a?(Range) && idx.begin < 0 && idx.end > 0
      old_brackets(idx.begin..-1) + old_brackets(0..idx.end)
    else
      old_brackets(idx)
    end
  end
end

string = "hello world"

string[-4..2] # => "orldhel"
于 2013-06-04T18:35:52.523 回答