__FILE__ == $ PROGRAM_NAME在ruby中意味着什么?

时间:2016-05-08 14:53:16

标签: ruby variables special-variables

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

myproject
+ src\main\java\...
+ src\test\java\...
+ src\main\resources

我想if __FILE__ == $PROGRAM_NAME #some code... end 是一个变量,它让我知道我所在文件的名称? 但那么__FILE__如何形容呢?另外,为什么这个if语句是必要的,因为程序是否有效?

2 个答案:

答案 0 :(得分:7)

__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!

答案 1 :(得分:1)

__FILE__是当前的源文件名。

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

变量之前的

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

点击此处了解详情 - http://www.zenspider.com/Languages/Ruby/QuickRef.html#18