Индекс среза строки Ruby: str [n..infinity]

Легкий вопрос, но не нашел его в документе.

Как отрезать строку или массив от n до бесконечности?

>> 'Austin'[1..3]
=> "ust"
>> 'Austin'[1..]
SyntaxError: compile error
(irb):2: syntax error, unexpected ']'
    from (irb):2

Ответ 1

Используйте обратную индексацию:

[1..-1]

Элемент в Ruby (и некоторых других языках) имеет прямой индекс и "обратный". Итак, строка длиной n имеет 0..(n-1) и дополнительные (-n)..-1 индексы, но не более - вы не можете использовать >=n или <-n индексы.

  'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's'
  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7   8 
<- error |                you can use this               | error ->

Ответ 2

Использовать -1: -)

'Austin'[1..-1] # => "ustin"

Ответ 3

Попробуйте использовать [1..-1]

Ответ 4

Если вы назначаете строку переменной, вы можете использовать длину/размер

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin

Ответ 5

Довольно элегантно, используя бесконечный диапазон, представленный в Ruby 2.6:

string = 'Austin'
string[1..] # => ustin

Надеюсь, что это пригодится кому-то. Отрезает пару символов от лучшего подхода до сих пор, и будет очень читабельным, как только будут приняты бесконечные диапазоны.