Ruby 命令行选项“如何使用?”;W1";不同于;W0";?

Ruby 命令行选项“如何使用?”;W1";不同于;W0";?,ruby,ruby-1.9.3,Ruby,Ruby 1.9.3,在Ruby脚本中,可以使用$VERBOSE全局变量的值测试详细性,该变量可以有三种状态: nil in case verbosity level was “0” (silence) false for level “1” (medium); this is the default true for level “2” (verbose); this is verbose mode. 我开始使用我的代码来理解它们之间的区别: @ubuntu:~$ ruby -W0 -e 'a=10;a=10;@

在Ruby脚本中,可以使用
$VERBOSE
全局变量的值测试详细性,该变量可以有三种状态:

nil in case verbosity level was “0” (silence)
false for level “1” (medium); this is the default
true for level “2” (verbose); this is verbose mode.
我开始使用我的代码来理解它们之间的区别:

@ubuntu:~$ ruby -W0 -e 'a=10;a=10;@foo'
@ubuntu:~$ ruby -W1 -e 'a=10;a=10;@foo'
@ubuntu:~$ ruby -W2 -e 'a=10;a=10;@foo'
-e:1: warning: possibly useless use of a variable in void context
-e:1: warning: instance variable @foo not initialized
@ubuntu:~$ 

但是真的不明白
W1
W0
之间有什么区别。有谁能帮我理解这一区别吗?

要了解真正的区别,您必须在$STDERR上打印一些文本。我对您的示例做了以下更改:

ruby -W0 -e 'a=10;a=10;@foo;warn "hello"'
请注意,使用
W0
标志运行代码时,执行时终端中不会显示任何内容。现在,如果使用
W1
运行,您将看到
内核#warn
生成的“error”消息:

ruby -W1 -e 'a=10;a=10;@foo;warn "hello"'

最后,
W2
将显示解释器生成的错误和警告。

要查看真正的差异,必须在$STDERR上打印一些文本。我对您的示例做了以下更改:

ruby -W0 -e 'a=10;a=10;@foo;warn "hello"'
请注意,使用
W0
标志运行代码时,执行时终端中不会显示任何内容。现在,如果使用
W1
运行,您将看到
内核#warn
生成的“error”消息:

ruby -W1 -e 'a=10;a=10;@foo;warn "hello"'

最后,
W2
将显示解释器生成的错误和警告。

Humm,理解为,
W0
抑制所有内容,但
w1
可以执行除
警告之外的所有操作。现在我的快速问题是
warn
中的消息与代码生成的其他警告有何不同?@user2060534
内核#warn
将消息打印到STDERR上。而“正常”警告则打印在标准输出上。这有帮助吗?非常感谢您的解释!哼哼,我明白,
W0
抑制一切,但是
w1
可以做除
警告之外的所有事情。现在我的快速问题是
warn
中的消息与代码生成的其他警告有何不同?@user2060534
内核#warn
将消息打印到STDERR上。而“正常”警告则打印在标准输出上。这有帮助吗?非常感谢您的解释!