【问题标题】:How to get Ruby Dir#glob to return basenames, not absolute_paths?如何让 Ruby Dir#glob 返回基本名称,而不是绝对路径?
【发布时间】:2011-08-14 05:23:16
【问题描述】:

FakeProfilePictures::Photo.all_large_names_2x(定义如下)返回一个绝对路径名数组,但是当我从irb 中的正确目录执行Dir["picture_*@2x.*"] 时,我只能得到基本名称(我想要的)。获得基本名称的最佳方法是什么?我知道我可以通过添加.map { |f| File.basename(f) } 来做到这一点,如评论中所示,但有没有更简单的/better/faster/stronger 方式?

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

【问题讨论】:

    标签: ruby absolute-path dir


    【解决方案1】:

    你可以的

    Dir.chdir(DIR) do
      Dir["picture_*@2x.*"]
    end
    

    块后,恢复原目录。

    【讨论】:

    • 不错。 @@all_large_names_2x ||= Dir.chdir(DIR) { Dir["picture_*@2x.*"] } 工作!谢谢!我想我会这样做,因为它的代码更少并且可能更快?谁知道...
    【解决方案2】:

    您可以在 globbing 之前将 chdir 转换为 DIR,但我只会通过 basename 运行所有内容。

    【讨论】:

    • 为什么?上面@J-_-L 的解决方案呢?我想我更喜欢那个。
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多