2014-01-18 3 views
0

Я работаю с рубинскими коанами и ударил один, который меня действительно смущает.Использование результатов массива из метода ruby ​​gsub и блока соответствия

"one two-three".gsub(/(t\w*)/) { $1[0, 1] } 
=> "one t-t" 

Однако, когда я изменяю возвращаемый массив для переменной $ 1, я получаю запутанный результат.

"one two-three".gsub(/(t\w*)/) { $1[1, 2] } 
=> "one wo-hr" 

Учитывая первый результат, я ожидаю, что второй бит кода вернет «один w-h». Почему во втором случае возвращаются два символа?

ответ

2

Вы ожидаете, что «один белый», который был бы результатом этого:

"one two-three".gsub(/(t\w*)/) { $1[1, 1] } 

[] является method on string, где диапазон может быть обеспечена следующим образом:

str[start, length] 

так 2 в вашем код - фактически длина (то есть количество символов)

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