什么是Ruby编号的全局变量

Mor*_*ess 9 ruby ruby-1.9

值$ 1,$ 2,$',$`在Ruby中意味着什么?

gee*_*aur 18

它们是从最近的模式匹配中捕获的(就像在Perl中一样; Ruby最初从Perl中提取了很多语法,尽管它现在已经基本上得到了它:). $1,$2等是指括号捕获一个正则表达式内:给定/a(.)b(.)c/,$1将之间的字符a,并b$2之间的字符bc. $`并且分别$'表示匹配整个正则表达式(它本身在其中$&)的字符串之前和之后的字符串.

实际上,只有在历史上,这些才有意义; 你可以找到它perldoc perlvar,它通常很好地记录了Perl变量的预期助记符和历史记录,并且大多数仍然适用于Ruby中的全局变量.编号的捕获是用于捕获反向引用的正则表达式语法(替换\1,\2等); Perl在3.x版本的某个地方从前者切换到后者,因为在正则表达式之外使用反向引用语法过于复杂.(当Perl 5推出时,解析器已被充分重写,语法再次可用,并立即重用于引用/"指针".Ruby选择使用名称引用:,这更接近于Lisp和Smalltalk风格;因为Ruby最初与Smalltalk风格的OO一样开始,这在语言上更有意义.)这同样适用$&于历史正则表达式语法中的简单&(但你不能在替换部分之外使用它)替换,所以它变成了一个变量$&). $`并且$'都是"cutesy":匹配字符串中的"back-quote"和"forward-quote".


Cod*_*lan 7

这里列出了非编号的:

http://www.zenspider.com/Languages/Ruby/QuickRef.html#19

$1, $2 ... $N 引用正则表达式捕获组中的匹配项.

所以:

"ab:cd" =~ /([a-z]+):([a-z]+)/
Run Code Online (Sandbox Code Playgroud)

会产量

$1 = "ab"
$2 = "cd"
Run Code Online (Sandbox Code Playgroud)