我想获取目录中除隐藏文件(名称以点开头的文件)之外的所有文件:
@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