为什么ruby路径名#basename返回前缀为“Pathname:”的文件名?

时间:2014-06-09 19:24:02

标签: ruby

除了隐藏文件(名称以点开头的文件)之外,我想获取目录中的所有文件:

@files = Pathname.new('.').children.select do |file|
  file.basename[0] != '.'
end

我无法做到这一点,cos #basename以"<#Pathname:.envrc>"的形式返回字符串。所以我需要把它file.basename =~ '#<Pathname:.',这对我来说似乎很奇怪。

为什么他们用&#34;路径名&#34;作为前缀?字?

2 个答案:

答案 0 :(得分:3)

看看OP的答案,我想,它可以写成

@files = Pathname.new('.').children(false).reject do |file|
  file.to_s.start_with? '.'
end

children的文档说 - 如果你将with_directory设置为false,那么返回的路径名将仅包含文件名。这意味着,我们将获得所有的基本名称为路径名对象,例如Pathname:.gitPathname:English.rb。现在应用#to_s,我们将有'.git''English.rb'。因此,现在我们可以使用String#start_with?方法测试是否以.开头

答案 1 :(得分:2)

正如Arup建议的,要列出隐藏文件以外的所有文件,我应该这样做:

@files = Pathname.new('.').children.select do |file|
  file.to_s[0] != '.'
end