__FILE__ == $PROGRAM_NAME 在 ruby 中是什么意思?

What does __FILE__ == $PROGRAM_NAME mean in ruby?

我在审查 Ruby 中的代码时偶然发现了这个语法。代码是:

if __FILE__ == $PROGRAM_NAME
  #some code...
end

我想 __FILE__ 是一个变量,可以让我获取我所在文件的名称? 但是 $PROGRAM_NAME 是什么意思呢?另外,为什么这个 if 语句是必需的,因为程序可以使用或不使用它?

__FILE__为当前源文件名。

似乎ruby代码想要确保当前文件对应于需要执行的程序。

$ 前一个变量,表示它是一个全局变量。

点击这里了解更多 - http://www.zenspider.com/Languages/Ruby/QuickRef.html#18

__FILE__ 总是 returns 源文件的路径。它不是一个变量,所以你不能给它赋值。 returns 是相对路径还是绝对路径取决于您如何 运行 脚本。

默认情况下

$PROGRAM_NAME[=18=] returns 引导程序的命令(减去 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[=18=]是真正的全局变量,您可以更改它们的值。 $PROGRAM_NAME[=18=] 互为别名,所以你改变其中一个的值,另一个的值也会随之改变。例如,您有这样的 test2.rb

#!/usr/bin/env ruby
[=14=] = 'Hello, world!'
puts [=14=]
puts $PROGRAM_NAME

它打印

Hello, world!
Hello, world!