0

此代码产生预期的结果:

  def test_sub_is_like_find_and_replace
    assert_equal "one t-three", "one two-three".sub(/(t\w*)/) { $1[0, 1] }
  end

我知道这$1是第一个匹配的变量,但我不清楚[0,1]它是什么,或者为什么它取出最后两个字母"two"

4

2 回答 2

3

这在String.[]文档中有所介绍,特别是:

str[start, length] → new_str or nil

因此,$1[0, 1]意味着“将从索引 0 处的字符返回的字符串切片到索引 0 + 1。”

于 2013-10-28T00:43:34.720 回答
2

[0,1]可以应用于任何字符串以查找从索引位置 0 开始的 1 个字符:

>> "Hello"[0,1]
=> "H"

只是为了好玩,0和1以外的东西:

>> "Hello World"[3,5]
=> "lo Wo"

从索引位置 3 开始,占用 5 个字符。

在你的情况下

"two"[0, 1]

您在索引 0 处取一个字符,即“t”。看起来它删除了最后两个字符;实际上它只生产了第一个。

于 2013-10-28T00:45:32.010 回答