Ruby 中那些隐藏的$变量
Ruby 中充满了一系列的隐藏变量,我们可以从这些预定义的全局变量中获取一些有意思的信息。
全局进程变量
$$
表示当前运行的 ruby 进程。
我们可以从当前进程杀死它自己
$?
表示最近一个子进程的状态
异常和错误
$1
表示引起异常的信息。比如在这里 raise "there's no peanut butter"
,它的值就是 there's no peanut butter
。
$@
可以给出完整的引起错误的栈调用信息,它是一个数组。
字符串和分隔符
$;
表示 String.split
里的分隔符,默认是空格。
$,
用在 Array.join
和 Kernel.print
里,默认是 nil。
$/
表述读取输入的行分隔符。它被用在 Kernel.gets
里。它通常表示新行,但可以被修改。这个很难展示,因为 irb
依赖 \n
作为读取分隔符,如果把 $/ 设置成 nil,gets
就会读取整个文件。
$\
正好相反,它是作为输出的行分隔符。
文件
假设有个叫letter.text
的文件:
$.
表示文件当前被读取的行号。
$_
表示最后读取的行。
匹配和正则表达式
$~
表示最近一次正则匹配到的信息,如果有的话它就返回 MatchData
的示例,否则就是 nil
。
$&
跟 $~
非常相似,它返回最近一次匹配到的字符串。
$'
表示匹配不分后面的字符串。
其他
$>
表示ruby 默认的输出对象,用在 Kernel.print
里。
$*
可能是最常用全局变量,它表示包含传给 ruby 文件的所有变量的数组,假设有个叫 argument_echoer.rb
文件:
运行它:
原文:http://blog.dcxn.com/2012/09/16/cryptic-dollar-variables-and-their-meanings/
Meck
15 October 2012