Inline массив нарезки - PullRequest
       28

Inline массив нарезки

1 голос
/ 19 сентября 2011

Ся!Я недавно задавался вопросом об интересной вещи.Скажем, у меня есть этот фрагмент:

params['path'].split('/').delete_at(-1).each do |dir|
   # some work

, где

params['path'] = 'lorem/ipsum/dir/file.ext' #for instance

Что я на самом деле хочу сделать, так это перебирать все элементы специального массива, кроме последнего.Фрагмент, очевидно, не работает, потому что delete_at возвращает удаленный элемент.

Есть ли способ нарезать массив с помощью встроенного синтаксиса?Или мне что-то ужасно не хватает?Знаете ли вы какие-то другие приемы, чтобы упростить создание цепочки аналогичных методов?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Используйте синтаксис Array[range]:

params['path'].split('/')[0...-1].each do |dir|
    # ...

0...-1 означает от индекса 0 до индекса 1 с конца, исключая.

Это то же самое, что и .slice(0...-1).

См. Документы здесь

Попробуйте здесь: http://codepad.org/HyZ2GHxo


Вместо этого вы можете использовать File.dirname:

File.dirname(params['path']).split('/').each ...
2 голосов
/ 19 сентября 2011

Просто используйте Array#[] с диапазоном:

params['path'].split('/')[0..-2].each
...