• 全局变量

    全局变量

    Global variables

    全局变量

    A global variable has a name beginning with $.

    全局变量的名字以$开头。

    It can be referred to from anywhere in a program. Before initialization, a global variable has the special value nil.

    你可以在程序的任何地方引用全局变量。在对其进行初始化之前,一个全局变量的值是特殊的nil值。

    1. ruby> $foo
    2. nil
    3. ruby> $foo = 5
    4. 5
    5. ruby> $foo
    6. 5

    Global variables should be used sparingly.

    应当谨慎使用全局变量

    They are dangerous because they can be written to from anywhere.

    全局变量非常危险,因为它们可以在任何地方被改写。

    Overuse of globals can make isolating bugs difficult; it also tends to indicate that the design of a program has not been carefully thought out.

    过度使用全局变量会使隔离Bug变得很困难;它也倾向于表明一个程序的设计并没有经过仔细的考虑。

    Whenever you do find it necessary to use a global variable, be sure to give it a descriptive name that is unlikely to be inadvertently used for something else later (calling it something like $foo as above is probably a bad idea).

    无论何时,当你发现确实有必要使用全局变量时,一定要给它一个描述性的名称,这个名称不太可能在以后因为其他事情而无意中使用它(将其命名为$foo很可能是一个坏主意)。

    One nice feature of a global variable is that it can be traced; you can specify a procedure which is invoked whenever the value of the variable is changed.

    全局变量的一个很好的特性是它可以被跟踪;你可以指定一个过程,该过程在变量的值被更改时被调用。

    1. ruby> trace_var :$x, proc{puts "$x is now #{$x}"}
    2. nil
    3. ruby> $x = 5
    4. $x is now 5
    5. 5

    When a global variable has been rigged to work as a trigger to invoke a procedure whenever changed, we sometimes call it an active variable.

    当一个全局变量被操纵,作为触发器来调用一个过程时,我们有时会把它称为一个活动变量

    For instance, it might be useful for keeping a GUI display up to date.

    例如,对于保持GUI展示最新内容,全局变量可能有用。

    There is a collection of special variables whose names consist of a dollar sign ($) followed by a single character.

    有一组特殊的变量,它们的名字由一个美元符号($)组成,后面跟着一个字符。

    For example, $$ contains the process id of the ruby interpreter, and is read-only. Here are the major system variables:

    例如,$$包含Ruby解释器的进程id,并且是只读的。以下是主要的系统变量:

    标识符 类型
    $! 最新的错误消息
    $@ 错误的位置
    $_ 最后读取的字符串
    $. 解释器读取的最后的行号
    $& 最后匹配的正则表达式字符串
    $~ 最后的正则表达式匹配,子表达式数组
    $n 最后匹配的第N个子表达式 (同$~[n])
    $= 不区分大小写的标记
    $/ 输入记录分隔符
    $\ 输出记录分隔符
    $0 Ruby脚本文件的名字
    $* 命令行参数
    $$ 解释器进程ID
    $? 执行子进程的最后退出状态

    In the above, $_ and $~ have local scope.

    上面的$_$~都有局部作用域。

    Their names suggest they should be global, but they are much more useful this way, and there are historical reasons for using these names.

    它们的名称表明它们应该是全局的,但是它们在这种方式中更有用,使用这些名字有一些历史原因。

    上一章 变量
    下一章 实例变量