我在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