__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!
我在审查 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!