Порівняння двох змінних

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

| f | відповідає назві реж | 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
додано

Це загальна умова, що ви використовуєте позначення do | var | , якщо ваш блок перевищує 1 рядок. Якщо це 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
додано