Что означает __FILE__ == $PROGRAM_NAME в ruby?
Я наткнулся на этот синтаксис при рассмотрении кода в Ruby. Код является:
if __FILE__ == $PROGRAM_NAME
#some code...
end
Я полагаю __FILE__
переменная, которая возвращает мне имя файла, в котором я нахожусь? Но что делает $PROGRAM_NAME
символизировать тогда? Кроме того, зачем это, если утверждение необходимо, так как программа работает с ним или без него?
2 ответа
__FILE__
всегда возвращает путь к исходному файлу. Это не переменная, поэтому вы не можете присвоить ей значение. Возвращает ли он относительный или абсолютный путь, зависит от того, как вы запустите скрипт.
$PROGRAM_NAME
или же $0
по умолчанию возвращает команду, которая загружает программу (минус путь интерпретатора ruby). Например, у вас есть файл скрипта test.rb
как это:
#!/usr/bin/env ruby
puts __FILE__
puts $PROGRAM_NAME
Если вы запустите этот скрипт с ruby test.rb
печатает
test.rb
test.rb
Если вы запустите скрипт с ruby /path/to/test.rb
печатает
/path/to/test.rb
/path/to/test.rb
Если вы дадите сценарию разрешение на выполнение и запустите его с ./test.rb
печатает
./test.rb
./test.rb
В отличие от __FILE__
, $PROGRAM_NAME
а также $0
являются реальными глобальными переменными, и вы можете изменить их значения. $PROGRAM_NAME
а также $0
являются псевдонимами друг для друга, поэтому вы меняете значение одного из них, значение другого изменится соответственно. Например, у вас есть test2.rb
как это:
#!/usr/bin/env ruby
$0 = 'Hello, world!'
puts $0
puts $PROGRAM_NAME
это печатает
Hello, world!
Hello, world!
__FILE__
текущее имя исходного файла.
Кажется, что код ruby хочет убедиться, что текущий файл соответствует программе, которую нужно выполнить.
$
перед переменной означает ее глобальную переменную.
Проверьте здесь, чтобы узнать больше - http://www.zenspider.com/Languages/Ruby/QuickRef.html