2010-12-12 4 views
1

Можно создать дубликат:
Array slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)Рубин массив Indicies

Выполнение этого кода на моем рубинового интерпретатором он заканчивает с 7..4 выводя ноль, и 6..4 не выводит ничего

arr = [1, 2, 3, 4, 5, 6] 

p arr[7..4] 
p arr[6..4] 

Согласно документу ruby, если начальный индекс находится за пределами допустимого диапазона, он возвращает нуль, и в этом случае se both (6 & 7) находятся вне диапазона массива, но только первый возвращает нуль.

Edit для clairification: Выход следующим образом:

nil 
[] 

Почему бы первое возвращение ноль, а второй []?

+0

Это не дубликат. В этом вопросе мы имеем '..' вместо', 'и обратные границы. – Nakilon

+1

@Nakilon: Нет никакой разницы, важно то, что первый индекс. @Paul: вы должны изменить 'puts' на' p', чтобы избежать путаницы в том, что является результатом нарезки, и что является результатом 'puts'. –

+0

ОК, я перечитал, действительно, дублирую. – Nakilon

ответ

1

Ну, наверное, переводчик не понимает диапазона «убывающий», пытаясь

puts arr[3..1] 

также не дал ничего, может быть, потому, что [3..1] не диапазон. [] s

+1

Такова проблема, на одной она возвращает пустую [], другая возвращает значение nil. Они ДОЛЖНЫ либо возвращать нуль, либо возвращаться [], а не делать ниль и один []. Это на 1.8.7 на osx, если это имеет значение. – Paul

+1

Нарезка массива с использованием «инвертированного» диапазона обычно используется в Ruby: например: '[1,2,3,4] [1 ..- 2]' дает '[2, 3]'. –

+0

lol, я не знаю. Ницца! Благодаря @Mladen – Cloudson

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