2つの変数の比較

Am I comparing the pipe symbols |x| & |f| correctly below ?

| f | dirの名前に対応する | x |ファイルの名前に対応する

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

2 答え

私はいくつかの変更を加えました:

  1. I made the variable names more informative
  2. I replaced the regular expression with String#start_with?
  3. I made the code more functional-programming than imperative programming, by replacing two eachs with a map and a find.
  4. I used "#{expression}" rather than "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 を置いてください。

1
追加された

ブロックが1行以上の場合は、 do | var | という表記法を使用するのが一般的な規則です。 1行の場合は、 {| var |} 構文を使用します。

ストリング補間は、メソッドの使用量が少ないため、連結よりも優先されます。

別のコンベンションでは、メソッドが引数を取らない場合は、最後に大括弧を使用しないでください。 (あなたがあなたの各方法でやったように)

Also, in the ruby world, we usually underscore_our_variable_names instead of camelCasing them. The exception being Constants (including class names) e.g. MyClass or 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
追加された