Ruby为我们提供了一些全局变量,我们在程序中可以随时调用,熟悉这些变量可以在我们编写程序时为我们提供很多的便利。

全局变量名称

说明

$@

The location of the latest error. (最近一次出错的位置,不知道这里的出错指的什么?Exception?还是error?

$_(特殊)

The string last read by gets. gets从用户输入所获取的最后一个字符串)

$.

The line number last read by interpreter. Ruby解析器所解析代码的最后一行的行号)

$&

The string last matched by regexp.

$~(特殊)

The last regexp match, as an array of subexpressions.

$n

The nth subexpression in the last match (same as $~[n]).

$=

The case-insensitivity flag.

$/

The input record separator.

$\

The output record separator.

$O(不是零)

The name of the ruby script file currently executing. (可以获取当前被执行的Ruby文件的名称)

$*

The command line arguments used to invoke the script.

$$

The Ruby interpreter's process ID.

$?

The exit status of last executed child process.

  上表中的$_$~有些特殊,他们实际上并不是“全局”变量,或者说对他们的引用是全局的,但是他们的值并不是全局的(在哪里都可以引用这两个变量,但是他们的值并不是全局相同的)。

这两个变量的值都是局部可见,也就是说,在一个代码块(方法、循环等等)中,这两个变量的值不受块外代码的影响,块外代码改变他们的值,在块内不会受影响。同样的,在块内改变他们的值也不会影响到块外的代码。写一段代码可以试一试,如下:

class Greeting
       def say_hello_to(name)
              puts “Hello #{name}!!
       end

       def who_is_here
              puts $_
              gets
       end
end

gets #输入sparksA
greeter = Greeting.new

greeter.say_hello($_) #输出”sparksA”
greeter.who_is_here #输出的是“nil”,然后我们输入sparksB 

puts $_ #输出“sparksA”,没有受到who_is_here方法中gets的影响


  除了上面两个特殊的“全局“变量外,再说说几个正则表达式相关的变量。$&是最后一个与正则表达式匹配成功的字符串。$~保存的是经正则表达式匹配后分隔成的字符串数组。要注意的是,如果正则表达式未匹配到任何字符串,那么$~保存的是一个空的数组,这点与Java中调用String类和Pattern类中的split方法不一样,这两个方法在未找到匹配的情况下会返回一个只包含源字符串的数组。$n中的n指的是正则表达式中的第n组表达式,这个变量中保存的就是第n组表达式所匹配到的字符串,类似于JavaMatcher类的group(int group)方法。
09-04 17:51