#ruby #absolute-path #dir
#ruby #абсолютный путь #каталог
Вопрос:
FakeProfilePictures::Photo.all_large_names_2x
(определено ниже) возвращает массив имен абсолютных путей, но когда я делаю это Dir["picture_*@2x.*"]
из правильного каталога в irb
, я получаю только базовые имена (то, что я хочу). Какой наилучший способ получить базовые имена? Я знаю, что мог бы сделать это, добавив, .map { |f| File.basename(f) }
как показано в комментарии, но есть ли более простой / лучший / быстрый / сильный способ?
module FakeProfilePictures
class Photo
DIR = File.expand_path(File.join(File.dirname(__FILE__), "photos"))
# ...
def self.all_large_names_2x
@@all_large_names_2x ||= Dir[File.join(DIR, "picture_*@2x.*")] # .map { |f| File.basename(f) }
end
end
end
Ответ №1:
Вы можете сделать
Dir.chdir(DIR) do
Dir["picture_*@2x.*"]
end
после блокировки восстанавливается исходный каталог.
Комментарии:
1. Неплохо.
@@all_large_names_2x ||= Dir.chdir(DIR) { Dir["picture_*@2x.*"] }
сработало! Спасибо! Думаю, я соглашусь с этим, потому что это меньше кода и, вероятно, быстрее? Кто знает…
Ответ №2:
Вы могли бы chdir
перейти в DIR
перед глобализацией, но я бы просто прогнал все через basename
.
Комментарии:
1. Почему? Как насчет решения @J-_-L, приведенного выше? Думаю, я предпочитаю это.