Проблема с исходным кодом ZenTest

Вот один метод, который обезьяна исправила метод Dir[] из автотеста

class Dir
  class << self
    alias :old_index :[]
    def [](*args)
      $-w, old_warn = false, $-w
      old_index(*args)
    ensure
      $-w = old_warn
    end
  end
end

Не могли бы вы помочь, объяснив эту строку $-w, old_warn = false, $-w? Заранее спасибо.

1 ответ

Решение

Вы можете назначить несколько переменных для нескольких значений в одной строке в Ruby.

Эта строка эквивалентна следующей:

old_warn = $-w
$-w = false

Если вы спрашивали, какова была цель; $-w является глобальной переменной в Ruby, которая указывает на логическое значение, указывающее, передал ли пользователь -w флаг к ruby исполняемый файл при запуске скрипта. Другими словами, переменная указывает, должен ли скрипт / программа в настоящее время печатать "предупреждения".

По сути, целью всего этого блока кода является обеспечение отключения предупреждений перед выполнением его ядра. Старое значение флага предупреждения сохраняется в новой переменной; флаг предупреждения отключен; и затем, когда выполнение завершено, флаг предупреждения сбрасывается на прежнее состояние.

Другие вопросы по тегам