Проблема с исходным кодом 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
исполняемый файл при запуске скрипта. Другими словами, переменная указывает, должен ли скрипт / программа в настоящее время печатать "предупреждения".
По сути, целью всего этого блока кода является обеспечение отключения предупреждений перед выполнением его ядра. Старое значение флага предупреждения сохраняется в новой переменной; флаг предупреждения отключен; и затем, когда выполнение завершено, флаг предупреждения сбрасывается на прежнее состояние.