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



我在Ruby中查看代码时偶然发现了这个sintax。代码为:

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

我想__FILE__是一个变量,它可以为我获取所在文件的名称?那么$PROGRAM_NAME模拟了什么呢?此外,既然程序可以使用或不使用if语句,为什么这个if语句是必要的?

__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#18

相关内容

  • 没有找到相关文章

最新更新