我是否比较了管道符号| x | &安培; | F |正确地在下面?
| F |对应于目录的名称 | X |对应于文件的名称
Dir.foreach(@sortedFilesDir) do
|f|
@fileArray.each() {
|x|
if(x.match(/^#{f}/))
puts "match - "+x+","+f
end
}
end
答案 0 :(得分:1)
如果您的块超过1行,则使用do |var|
表示法是一般约定。如果是1行,请使用{|var|}
语法。
字符串插值也优于连接,因为它使用较少的方法。
另一个约定是,如果您的方法不接受参数,请不要在末尾使用括号。 (就像你在每种方法中所做的那样)
此外,在红宝石世界中,我们通常使用underscore_our_variable_names而不是camelCasing它们。例外是常量(包括类名),例如MyClass
或ThisIsOneOfMyConstants
Dir.foreach(@sorted_files) do |f|
@file_array.each do |x|
if(x.match(/^#{f}/))
puts "match - #{x},#{f}"
end
end
end
如果您的目标是列出指定目录中与@file_array中的条目匹配的文件,那么您正确使用它们。
答案 1 :(得分:1)
我做了一些改变:
each
和map
替换两个find
,我使代码比命令式编程更具功能性编程。"match - "+x+","+f
但我没有检查它是否有效。
directory_names = Dir.foreach(@sorted_files_dir)
matching_directory_names = @file_array.map do |filename|
directory_names.find do |directory_name|
filename.start_with?("/" + filename + "/")
end
end
@file_array.zip(matching_directory_names) do |filename, matching_directory_name|
next if matching_directory_name.nil?
puts "match - #{filename},#{matching_directory_name}"
end
我希望每次循环运行时都不会计算directory_names
!如果是,那么您可能需要在脚本开头directory_names = Dir.foreach(@sorted_files_dir).to_a
。