简要分析Ruby局部域变量
Ruby作为一个灵活性较强的语言,内置了许多内部变量,不同的变量可以实现不同的功能,熟练的掌握这些变量的运用,可以方便我们编程。
Ruby局部域变量就是其中之一。
在某一个线程作用域内才能有效,下列也可看做是线程内的局部变量.
PS:这边讲解的几个变量都是于正则匹配相关的,正则匹配过程的代码是一样的,这里不重复输入正则表达式匹配的代码,只在第一个例子里给出完整的输入和输出,之后的例子只直接输出变量的值
Ruby局部域变量之$_
gets或readline最后读入的字符串.若遇到EOF则为nil.该变量的作用域是局部域.
irb(main):006:0> $_ => nil irb(main):007:0> gets foobar => "foobar\n" irb(main):008:0> $_ => "foobar\n"
Ruby局部域变量之$&
在当前作用域中,正则表达式最后一次匹配成功的字符串.若最后一次匹配失败,则为nil.
irb(main):002:0> $& => nil irb(main):010:0> /(foo)(bar)(BAZ)?/ =~ "foobarbaz" => 0 irb(main):011:0> $& => "foobar"
Ruby局部域变量之$~
在当前作用域中,最后一次匹配成功的相关信息(MatchData对象-为处理与正则表达式的匹配过程相关的信息而设置的类.).
可以使用$~[n]的形式从该数据中抽取第n个匹配结果($n).相当于是$1,$2...
等同于Regexp.last_match.
irb(main):012:0> $~ => #<MatchData "foobar" 1: "foo" 2:"bar" 3:nil> irb(main):026:0> $1 => "foo" irb(main):027:0> $~[1] => "foo"
Ruby局部域变量之$`
在当前作用域中,正则表达式最后一次匹配成功的字符串前面的字符串.若最后的匹配失败则为nil.
等同于Regexp.last_match.pre_match.
irb(main):016:0> $` => "" #由于最后匹配成功的内容是 foobar,输入的字符串前面没有别 的字符所以是""
Ruby局部域变量之$'
在当前作用域中,正则表达式最后一次匹配成功的字符串后面的字符串.若最后的匹配失败则为nil.
等同于Regexp.last_match.post_match.
irb(main):028:0> $' => "baz"
Ruby局部域变量之$+
在当前作用域中,正则表达式最后一次匹配成功的字符串部分中,与最后一个括号相对应的那部分字符串.若最后的匹配失败则为nil.在多项选择型匹配模型中,若您无法断定是哪个部分匹配成功时,该变量将会非常有用.
irb(main):029:0> $+ => "bar"
Ruby局部域变量之$1
$2
$3 ...