Ruby中__FILE__ == $PROGRAM_NAME是什么意思?

2026-04-11 14:331阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计620个文字,预计阅读时间需要3分钟。

Ruby中__FILE__ == $PROGRAM_NAME是什么意思?

在Ruby中,`if __FILE__==$PROGRAM_NAME` 这行代码的含义是检查当前正在执行的文件是否是作为程序本身运行的文件。

具体来说:- `__FILE__` 是一个特殊变量,它包含了当前正在执行的文件的路径。- `$PROGRAM_NAME` 也是一个特殊变量,它表示正在运行程序的名称。

当这行代码被执行时,它会比较 `__FILE__` 和 `$PROGRAM_NAME` 的值。如果它们相等,这意味着当前文件是作为独立程序运行的。如果不相等,可能意味着代码是作为库文件被其他程序调用的。

Ruby中__FILE__ == $PROGRAM_NAME是什么意思?

以下是一个简化的例子:

rubyif __FILE__==$PROGRAM_NAME puts 这是独立运行的程序else puts 这是被其他程序调用的库文件end

在这个例子中,如果 `example.rb` 文件被直接运行,控制台会输出 这是独立运行的程序。但如果 `example.rb` 被另一个Ruby脚本调用,控制台会输出 这是被其他程序调用的库文件。

参见英文答案 > What does `if __FILE__ == $0` mean in Ruby6个
在查看Ruby中的代码时,我偶然发现了这个sintax.代码是:

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

我想__FILE__是一个变量,它让我知道我所在文件的名称?
但是什么$PROGRAM_NAME呢?另外,为什么这个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!

本文共计620个文字,预计阅读时间需要3分钟。

Ruby中__FILE__ == $PROGRAM_NAME是什么意思?

在Ruby中,`if __FILE__==$PROGRAM_NAME` 这行代码的含义是检查当前正在执行的文件是否是作为程序本身运行的文件。

具体来说:- `__FILE__` 是一个特殊变量,它包含了当前正在执行的文件的路径。- `$PROGRAM_NAME` 也是一个特殊变量,它表示正在运行程序的名称。

当这行代码被执行时,它会比较 `__FILE__` 和 `$PROGRAM_NAME` 的值。如果它们相等,这意味着当前文件是作为独立程序运行的。如果不相等,可能意味着代码是作为库文件被其他程序调用的。

Ruby中__FILE__ == $PROGRAM_NAME是什么意思?

以下是一个简化的例子:

rubyif __FILE__==$PROGRAM_NAME puts 这是独立运行的程序else puts 这是被其他程序调用的库文件end

在这个例子中,如果 `example.rb` 文件被直接运行,控制台会输出 这是独立运行的程序。但如果 `example.rb` 被另一个Ruby脚本调用,控制台会输出 这是被其他程序调用的库文件。

参见英文答案 > What does `if __FILE__ == $0` mean in Ruby6个
在查看Ruby中的代码时,我偶然发现了这个sintax.代码是:

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

我想__FILE__是一个变量,它让我知道我所在文件的名称?
但是什么$PROGRAM_NAME呢?另外,为什么这个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!