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



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

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

我不能那样做,因为#basename以形式"<#Pathname:.envrc>"返回字符串。所以我需要将其设置为file.basename =~ '#<Pathname:.',这对我来说似乎很奇怪。

为什么要加上"Pathname"前缀呢?

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

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

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

按照Arup的建议,列出除了隐藏文件之外的所有文件,我应该这样做:

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

最新更新