我在查看Ruby中的代码时偶然发现了这个sintax。代码是:
myproject
+ src\main\java\...
+ src\test\java\...
+ src\main\resources
我想if __FILE__ == $PROGRAM_NAME
#some code...
end
是一个变量,它让我知道我所在文件的名称?
但那么__FILE__
如何形容呢?另外,为什么这个if语句是必要的,因为程序是否有效?
答案 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