2013-10-28 3 views
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".

ответ

2

[0,1] может быть применен к любой строке, чтобы найти 1 символ, начиная с позиции с индексом 0:

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

Просто для удовольствия, что-то другое, чем 0 и 1:

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

Запускается в индексе позиция 3, занимает 5 символов.

В вашем случае

"two"[0, 1] 

вы берете один символ с индексом 0, а именно "Т". Он выглядит, как будто он удалил последние два символа; в действительности это произведено только первый.

3

Это рассматривается в String.[] documentation, в частности:

str[start, length] → new_str or nil 

Итак, $1[0, 1] означает "порезать строку возвращающегося из символа с индексом 0 для индекса 0 + 1."

Смежные вопросы