1

こんにちは!最近、面白いことを考えていました。このスニペットがあるとします:

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

どこ

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

私が実際にやりたいことは、アドホック配列の最後のメンバーを除くすべてのメンバーを反復処理することです。delete_at削除された要素を返すため、スニペットは明らかに機能しません。

「インライン」構文で配列をスライスする方法はありますか? それとも、何かがひどく欠けていますか?同様のメソッドチェーンを簡単にする他のトリックを知っていますか?

4

2 に答える 2

2

範囲で使用Array#[]するだけです:

params['path'].split('/')[0..-2].each
于 2011-09-19T18:03:55.833 に答える
2

Array[range]次の構文を使用します。

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

0...-10インデックスからインデックス1まで、エンド エクスクルーシブを意味します。

これは と同じ.slice(0...-1)です。

こちらのドキュメントをご覧ください

ここで試してみてください: http://codepad.org/HyZ2GHxo


代わりに File.dirname を使用することもできます:

File.dirname(params['path']).split('/').each ...
于 2011-09-19T18:04:06.400 に答える