簡要分析Ruby局部域變量
Ruby作為一個(gè)靈活性較強(qiáng)的語言,內(nèi)置了許多內(nèi)部變量,不同的變量可以實(shí)現(xiàn)不同的功能,熟練的掌握這些變量的運(yùn)用,可以方便我們編程。 #t#
Ruby局部域變量就是其中之一。
在某一個(gè)線程作用域內(nèi)才能有效,下列也可看做是線程內(nèi)的局部變量.
PS:這邊講解的幾個(gè)變量都是于正則匹配相關(guān)的,正則匹配過程的代碼是一樣的,這里不重復(fù)輸入正則表達(dá)式匹配的代碼,只在***個(gè)例子里給出完整的輸入和輸出,之后的例子只直接輸出變量的值
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局部域變量之$&
在當(dāng)前作用域中,正則表達(dá)式***一次匹配成功的字符串.若***一次匹配失敗,則為nil.
- irb(main):002:0> $&
- => nil
- irb(main):010:0> /(foo)(bar)(BAZ)?/
=~ "foobarbaz"- => 0
- irb(main):011:0> $&
- => "foobar"
Ruby局部域變量之$~
在當(dāng)前作用域中,***一次匹配成功的相關(guān)信息(MatchData對象-為處理與正則表達(dá)式的匹配過程相關(guān)的信息而設(shè)置的類.).
可以使用$~[n]的形式從該數(shù)據(jù)中抽取第n個(gè)匹配結(jié)果($n).相當(dāng)于是$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局部域變量之$`
在當(dāng)前作用域中,正則表達(dá)式***一次匹配成功的字符串前面的字符串.若***的匹配失敗則為nil.
等同于Regexp.last_match.pre_match.
- irb(main):016:0> $`
- => "" #由于***匹配成功的內(nèi)容是
foobar,輸入的字符串前面沒有別
的字符所以是""
Ruby局部域變量之$'
在當(dāng)前作用域中,正則表達(dá)式***一次匹配成功的字符串后面的字符串.若***的匹配失敗則為nil.
等同于Regexp.last_match.post_match.
- irb(main):028:0> $'
- => "baz"
Ruby局部域變量之$+
在當(dāng)前作用域中,正則表達(dá)式***一次匹配成功的字符串部分中,與***一個(gè)括號相對應(yīng)的那部分字符串.若***的匹配失敗則為nil.在多項(xiàng)選擇型匹配模型中,若您無法斷定是哪個(gè)部分匹配成功時(shí),該變量將會非常有用.
- irb(main):029:0> $+
- => "bar"
Ruby局部域變量之$1
$2
$3 ...
分別存儲著***一次模型匹配成功時(shí)與第n個(gè)括號相匹配的值.若沒有相應(yīng)的括號時(shí),其值為nil.等同于Regexp.last_match[1], Regexp.last_match[2],...
- irb(main):030:0> $1
- => "foo"
- irb(main):031:0> $2
- => "bar"
- irb(main):032:0> $3
- => nil