Comparer deux variables

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

| f | correspond au nom d'un dir | x | correspond au nom d'un fichier

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

2 Réponses

J'ai fait quelques changements:

  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

Je n'ai pas vérifié que cela fonctionne, cependant.

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

J'espère que noms_répertoire ne sera pas calculé à chaque exécution de la boucle! Si tel est le cas, vous voudrez peut-être noms_répertoire = Dir.foreach (@ rép_fichier_sortifié) .to_a au début du script.

1
ajouté

Selon la convention générale, vous utilisez la notation do | var | si votre bloc compte plus d'une ligne. S'il s'agit d'une ligne, utilisez la syntaxe {| var |} .

L'interpolation de chaîne est également préférable à la concaténation car elle utilise moins de méthodes.

Une autre convention est que si votre méthode ne prend pas d'arguments, n'utilisez pas les crochets à la fin. (Comme vous l'avez fait dans votre chaque méthode)

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

Vous les utilisez correctement si votre objectif est de répertorier dans le répertoire spécifié les fichiers correspondant à une entrée de votre @file_array.

1
ajouté