Ruby中__FILE__ == $PROGRAM_NAME的条件表达什么含义?
- 内容介绍
- 文章标签
- 相关推荐
本文共计526个文字,预计阅读时间需要3分钟。
在Ruby中,表达式 `if __FILE__==$PROGRAM_NAME` 的意思是判断当前执行的文件是否是程序的主执行文件。这里的 `__FILE__` 是一个特殊变量,它包含了当前文件的路径。`$PROGRAM_NAME` 是另一个特殊变量,它包含了当前正在执行的程序(即Ruby解释器)的名称。
如果当前执行的文件与程序的主名称相同,即它被直接运行,那么这个条件会评估为真。以下是对应的简化内容:
当你在查看Ruby代码时,如果你看到了`if __FILE__==$PROGRAM_NAME`,这表示该代码块仅在作为独立脚本运行时执行。代码示例:`if __FILE__==$PROGRAM_NAME`。
参见英文答案 > What does `if __FILE__ == $0` mean in Ruby6个在查看Ruby中的代码时,我偶然发现了这个sintax.代码是:
if __FILE__ == $PROGRAM_NAME #some code... end
我想__FILE__是一个变量,它让我知道我所在文件的名称?
但是什么$PROGRAM_NAME呢?另外,为什么这个if语句是必要的,因为程序可以使用或不使用它?
$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!
本文共计526个文字,预计阅读时间需要3分钟。
在Ruby中,表达式 `if __FILE__==$PROGRAM_NAME` 的意思是判断当前执行的文件是否是程序的主执行文件。这里的 `__FILE__` 是一个特殊变量,它包含了当前文件的路径。`$PROGRAM_NAME` 是另一个特殊变量,它包含了当前正在执行的程序(即Ruby解释器)的名称。
如果当前执行的文件与程序的主名称相同,即它被直接运行,那么这个条件会评估为真。以下是对应的简化内容:
当你在查看Ruby代码时,如果你看到了`if __FILE__==$PROGRAM_NAME`,这表示该代码块仅在作为独立脚本运行时执行。代码示例:`if __FILE__==$PROGRAM_NAME`。
参见英文答案 > What does `if __FILE__ == $0` mean in Ruby6个在查看Ruby中的代码时,我偶然发现了这个sintax.代码是:
if __FILE__ == $PROGRAM_NAME #some code... end
我想__FILE__是一个变量,它让我知道我所在文件的名称?
但是什么$PROGRAM_NAME呢?另外,为什么这个if语句是必要的,因为程序可以使用或不使用它?
$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!

