解析 ruby 全局变量

时间:2022-05-05 08:28:34

全局变量由$开头.它们可以在程序的任何位置访问到.在初始化前,全局变量有一个特殊的值nil.

ruby>$foo

nil

ruby>$foo=5

5

ruby>$foo

5

应谨慎使用全局变量.由于在任何地方都可以被写因此他们相当危险.滥用全局变量会导致很难隔离臭虫;同时也视为程序的设计未经严格考虑.当你发现必须要使用全局变量时,记得给它一个不会在其它地方一不小心就用到的描述性名字(像上面那样叫$foo可能不是一个好想法).

全局变量的好处是其可以被跟踪;你可以做一个当变量值改变时被调用的过程.

ruby>trace_var:$x,proc{print"$xisnow",$x,"\n"}

nil

ruby>$x=5

$xisnow5

5

当一个全局变量(改变时)作为一个过程的激发器,我们也管它叫活动变量(activevariable).比如说,它可用于保持GUI显示的更新.

这里列出了一些以$打头并跟单个字符的特殊变量.比如,$$包含了Ruby解释器的进程id,它是只读的.这里是主要的系统变量以及它们的含义(细节可在Ruby的参考手册中查到):

$!最近一次的错误信息

$@错误产生的位置

$_gets最近读的字符串

$.解释器最近读的行数(linenumber)

$&最近一次与正则表达式匹配的字符串

$~作为子表达式组的最近一次匹配

$n最近匹配的第n个子表达式(和$~[n]一样)

$=是否区别大小写的标志

$/输入记录分隔符

$\输出记录分隔符

$0Ruby脚本的文件名

$*命令行参数

$$解释器进程ID

$?最近一次执行的子进程退出状态

上面的$_和$~都有作用范围.它们的名字暗示其为全局的,但它们一般都是这样用的,关于它们的命名有历史上的原因.