Сравнение двух переменных

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

| F | соответствует названию каталога | Х | соответствует имени файла

  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
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков