为什么Ruby的文件相关类型是基于字符串的(字符串类型)?

例如Dir.entries返回字符串数组与包含File或Dir实例的数组.
关于Dir和File类型的大多数方法.相比之下,这些情况是动态的.

没有Dir#文件夹或Dir#文件 – 而是我明确地说

>遍历Dir.entries
>为其构建路径(File.expand_path)
每个物品
>检查File.directory?

简单的用例如获取此目录中的所有.svg文件似乎需要许多箍/循环/检查.我使用Ruby是错误的还是Ruby的这个方面看起来非常不重要?

最佳答案
根据您的需要,FileDir可能会很好.

当你需要链接命令并且(理所当然地)认为只使用带有字符串参数的类方法时,你可以使用Pathname.它是一个标准的库.

例子

Dirs和文件

require 'pathname'

my_folder = Pathname.new('./')
dirs, files = my_folder.children.partition(&:directory?)
# dirs is now an Array of Pathnames pointing to subdirectories of my_folder
# files is now an Array of Pathnames pointing to files inside my_folder

所有.svg文件

如果由于某种原因可能存在扩展名为.svg的文件夹,则只能过滤Pathname.glob返回的路径名:

svg_files = Pathname.glob("folder/", "*.svg").select(&:file?)

如果你想要一个特定的语法:

class Pathname
  def files
    children.select(&:file?)
  end
end

aDir = Pathname.new('folder/')
p aDir.files.find_all{ |f| f.extname == '.svg' }

迭代目录树

Pathname#find会有所帮助.

转载注明原文:为什么Ruby的文件相关类型是基于字符串的(字符串类型)? - 代码日志