【发布时间】:2017-01-13 07:52:25
【问题描述】:
例如Dir.entries 返回一个字符串数组与包含 File 或 Dir 实例的数组。
大多数关于 Dir 和 File 类型的方法。相比之下,这些实例是乏善可陈的。
没有Dir#folders 或Dir#files - 相反,我明确表示
- 循环遍历
Dir.entries - 构建路径 (
File.expand_path) 每个项目 - 检查
File.directory?
在这个目录中获取所有 .svg 文件 之类的简单用例似乎需要大量的循环/循环/检查。是我用错了 Ruby 还是 Ruby 的这个方面看起来很不像 Ruby?
【问题讨论】:
-
嗯,这很好。假设,
Dir.entries返回了 File 对象。如果您只需要名称并正确地认为构造 File 对象会浪费 CPU 和内存怎么办? -
你想到的 API,它可能不在标准库中,但肯定有它的瑰宝。
-
"没有 Dir#folders 或 Dir#files" - 底层文件系统通常没有这种区别(文件和目录没有单独的列表)。因此,要仅查找目录,stdlib 方法必须执行您描述的那个循环,只是隐式的。
-
@SergioTulentsev - 是的,例如Dir.entries 可以返回字符串 + Dir#entries 返回类型化的对象。让消费者做出选择。 Ruby 中的 stdlib 方法具有以最高效的方式实现的优点 + 使客户端代码更短/更好读。
-
@Gishu:“Dir.entries 可以返回字符串 + Dir#entries 返回类型化的对象”——截至目前,我看不出原因/逻辑。如果是这样的话,我会感到非常惊讶。
标签: ruby strong-typing