6

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

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

我想__FILE__是一个变量可以让我知道我所在的文件的名称吗?但那象征着什么$PROGRAM_NAME呢?另外,为什么这个 if 语句是必要的,因为程序可以使用或不使用它?

4

2 回答 2

13

__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$0test2.rb

#!/usr/bin/env ruby
$0 = 'Hello, world!'
puts $0
puts $PROGRAM_NAME

它打印

Hello, world!
Hello, world!
于 2016-05-08T15:16:54.170 回答
1

__FILE__是当前的源文件名。

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

$在变量之前,意味着它是一个全局变量。

点击此处了解更多信息 - http://www.zenspider.com/Languages/Ruby/QuickRef.html#18

于 2016-05-08T14:58:13.867 回答