比较两个变量

时间:2011-10-27 22:01:19

标签: ruby arrays

我是否比较了管道符号| x | &安培; | F |正确地在下面?

| F |对应于目录的名称 | X |对应于文件的名称

  Dir.foreach(@sortedFilesDir) do
  |f|
    @fileArray.each() {
      |x| 
      if(x.match(/^#{f}/))
        puts "match - "+x+","+f
      end
    }
  end

2 个答案:

答案 0 :(得分:1)

如果您的块超过1行,则使用do |var|表示法是一般约定。如果是1行,请使用{|var|}语法。

字符串插值也优于连接,因为它使用较少的方法。

另一个约定是,如果您的方法不接受参数,请不要在末尾使用括号。 (就像你在每种方法中所做的那样)

此外,在红宝石世界中,我们通常使用underscore_our_variable_names而不是camelCasing它们。例外是常量(包括类名),例如MyClassThisIsOneOfMyConstants

 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)

我做了一些改变:

  1. 我使变量名称更具信息性
  2. 我用String#start_with?
  3. 替换了正则表达式
  4. 通过用eachmap替换两个find,我使代码比命令式编程更具功能性编程。
  5. 我使用了“#{expression}”而不是"match - "+x+","+f
  6. 但我没有检查它是否有效。

    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