Вложенный оператор if, не оценивающий результат операции - PullRequest
0 голосов
/ 29 ноября 2018

Я создаю файл во временном каталоге.Если генерируемый файл отличается от уже существующего, я не хочу его обновлять и запускать команду.Если это то же самое, то я ничего не могу сделать.

Мой код выглядит так:

errstatus = 0
if FileUtils.identical?('/var/tmp/newfile', '/var/tmp/originalfile')
  $stderr.puts "Files are the same, nothing to do"
else
  $stderr.puts "Files are different, let's update them."

  if FileUtils.cp_r '/var/tmp/newfile', '/var/tmp/originalfile'
    $stderr.puts "File copied successfully."

    if system('systemcommand1 here')
      $stderr.puts "command ran OK"

      if system('systemcommand2 here')
        $stderr.puts "next command ran ok"

      else
        $stderr.puts "command 2 failed"
        errstatus = 1
      end
    else
      $stderr.puts "command 1 failed"
      errstatus = 1
    end
  end
end

Когда я запускаю его, когда файлы отличаются, я получаю вывод:

Files are different, let's update them.

Он работает с FileUtils.cp_r без каких-либо ошибок, но не говорит об успешном копировании файла или выполнении системной команды.Я использовал тот же синтаксис для оценки FileUtils.identical?, но он не работает для FileUtils.cp_r.

Где я здесь ошибаюсь?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

FileUtils::cp_r возвращает nil (что в Ruby неверно), если копирование прошло успешно, в противном случае возникает ошибка.Он никогда не вернет истинное значение, поэтому делать это условие не имеет смысла.

Поскольку у него нет оператора else, просто удалите if перед ним.Если вам нужна обработка ошибок для вашего cp_r, вам нужно будет обернуть его в блок begin..rescue.

0 голосов
/ 29 ноября 2018

Возможно, это связано с тем, что if FileUtils.cp_r '/var/tmp/newfile', '/var/tmp/originalfile' не имеет предложения else, поэтому, если он возвращает false или выдает исключение, он не вводит if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...