全局变量
所有以`$'开头的变量
内部变量
全局变量中的内部变量(本网页介绍的变量)
特殊变量
内部变量中,形如"`$' + 1位数字或符号"的变量
选项变量
内部变量中,由命令行选项设定的变量,形如"`$-' +1个选项字符"
根据变量值的作用域的不同,大致将内部变量划分如下:
- 局部域, 可看做是线程内的局部变量.
- 线程局部域,在一个线程内部时是全局域变量,但在不同的线程之间是彼此独立的.
- 全局域
属于局部域的:
$_
gets或readline最后读入的字符串.若遇到EOF则为nil.
$& (等同于Regexp.last_match[0])
在当前作用域中,正则表达式最后一次匹配成功的字符串.若最后一次匹配失败,则为nil.
$~ (等同于Regexp.last_match)
在当前作用域中,最后一次匹配成功的相关信息(MatchData对象).若对其进行设定的话, 则$&以及$1 ... $9等的值也会发生变化.可以使用$~[n]的形式从该数据中抽取第n个匹配结果($n)
$‘ (等同于Regexp.last_match.pre_match)
在当前作用域中,正则表达式最后一次匹配成功的字符串前面的字符串.若最后的匹配失败则为nil。
$· (等同于Regexp.last_match.post_match)
在当前作用域中,正则表达式最后一次匹配成功的字符串后面的字符串.若最后的匹配失败则为nil。
$+
在当前作用域中,正则表达式最后一次匹配成功的字符串部分中,与最后一个括号相对应的那部分字符串.若最后的匹配失败则为nil.
$1($2,$3,...) (等同于Regexp.last_match[1], Regexp.last_match[2],...)
分别存储着最后一次模型匹配成功时与第n个括号相匹配的值.若没有相应的括号时,其值为nil.
属于线程局部域的:
$@
以数组形式保存着发生异常时的back trace信息. 数组元素是字符串,它显示了方法调用的位置,其形式为:"filename:line"
属于全局域的:
$/
输入记录分隔符。默认值为"\n"。若将该变量设为 nil 时,将一次读入整个文件。若设为空字符串 "" 则将是段落模式,此时会把2个以上的连续的换行符当作记录切分符。
$\
输出记录分隔符。print会在最后输出该字符串。默认值为nil,此时不会输出任何字符。
$,
默认的切分字符。若Array#join中省略了参数时或在print的各个参数间将会输出它,默认值为 nil ,等同于空字符串。
$;
当String#split中省略参数时的切分字符。默认值为nil,此时将进行特殊的分割。
$<
由参数(若没的话就使用标准输入)构成的虚拟文件。也就是常数ARGF的别名。
$>
内部函数print、puts或p等的默认输出对象。初始值为STDOUT。若指定了-i[extension]选项的话,则将使用与读取源同名的文件。
$*
传递给Ruby脚本的参数.内部常数ARGV的别名.
$:/$LOAD_PATH
包含一个数组,其内容是load或require加载文件时用的搜索目录列表.
$"/$LOADED_FEATURES
包含以require加载的文件名的数组.这可以防止require多次加载同一个文件.
$DEBUG
若此值为真则变成调试模式。它由-d选项进行设定。
$FILENAME
虚拟文件ARGF中,当前正在读入的(gets方法正在读的)文件名
$stdin/$stdout/$stderr
标准输入,标准输出,标准错误输出
$VERBOSE
警告等级分为三级,分别如下。
- nil: 不输出警告
- false: 只输出重要警告(默认)
- true: 输出所有警告
$KCODE
Ruby可识别的多字节字符串的编码。变量值为"EUC" "SJIS" "UTF8" "NONE"之一。可以使用Ke,Ks,Ku,Kn。 "e" "E" 代表 "EUC","s" "S" 代表 "SJIS","u" "U" 代表 "UTF8",而"n" "N" 则代表 "NONE"。默认值为"NONE"。
选项变量
用来显示Ruby解释器命令行信息的变量。其形式为$-?,?的部分是1位选项字符。
$-0
$/ 的别名。
$-a
若指定了-a时,其值为真。只读变量。
$-d
$DEBUG 的别名。
$-F
$; 的别名。
$-i
若指定了-i[extension]时,它将保存扩展名字符串。否则其值为nil。也可以在脚本中对其进行赋值,此时将在开始读入ARGV中的下一个文件之前进行in-place替换。
$-I
$LOAD_PATH 的别名。
$-K
$KCODE 的别名。
$-l
若指定了-l时,其值为真。只读变量。
$-p
若指定了-p时,其值为真。只读变量。
$-w
$VERBOSE 的别名。
$-W
返回由-W[level]指定的值。也就是说,根据$VERBOSE的取值不同
- nil: 不输出警告 -> 0
- false: 只输出重要警告(默认) -> 1
- true: 输出所有警告 -> 2