Как переносить иерархию каталогов в Ruby? - PullRequest
1 голос
/ 11 февраля 2011

Я хотел бы найти файл с определенным именем, начиная с текущего рабочего каталога и работая по иерархии переносимым способом, пока не достигну корня или его эквивалента.

Например,Окружение Linux, я знаю, что могу сделать

dir = '.'
while File.expand_path(dir) != '/' do
    <check for the file>
    dir = File.join dir, '..'
end

... но есть ли более хороший способ, который бы работал независимо от того, где заканчивается цепочка родительских каталогов?

Кроме того, рефакторинг этогобыло бы неплохо использовать переменную local, но я еще не нашел хороший способ.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Практически во всех средах "cd .." в корне дерева каталогов будет идентичным самому себе. Итак, если вы поднимаетесь на один уровень вверх, но попадаете в каталог с тем же , вы находитесь в корне.

Сделайте так, чтобы ваше состояние в цикле while.

0 голосов
/ 11 февраля 2011

есть ли лучший способ, который бы работал независимо от того, где заканчивается цепочка родительских каталогов?

Где еще заканчивается цепочка родительских каталогов, кроме корневого? Структура каталогов накопителя - это дерево или перевернутое дерево, если вы хотите думать об этом таким образом. Корневой каталог всегда один и тот же; Это так низко, как вы можете пойти.

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

Это не уникальный код Ruby, т. Е. Обычно мы используем массив и перебираем его каким-либо образом, но я не вижу, чтобы такая практика приносила вам много денег с точки зрения простоты или чистоты.

Я даю вам 90% и серебряную звезду. Хорошая работа.


EDIT:

Мне нравится ответ, который дал @Джон Феминелла. Это здравый смысл, позволяющий определить, когда вы попали в корень системы накопителей, и будет хорошо работать на кроссплатформенном уровне. Я не могу придумать ни одной системы, которая бы давала вам произвольно меняющееся корневое обозначение, поэтому продолжайте цикл, пока каталог больше не изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...