Ruby奇特變量特殊性質講解
Ruby語言作為一種新型的編程語言,具有很多和其他編程語言不同的特有的性質。在這里我們就為大家介紹一些Ruby奇特變量的相關概念。#t#
以前ruby從perl中借鑒了很多東西,Ruby奇特變量其中之一就是全局的魔法變量,在這些變量中,估計沒有沒有哪個有$_更奇特。比如,方法gets有這個一個效果:
在返回剛讀到的行數據的同時,也把這行的數據存入$_.如果你調用print方法而沒有帶參數,那么它將會打印出$_中的內容。如果你在寫if或者while語句時,僅將一個正則表達式作為條件,那么這個正則表達式會自動去匹配$_.這樣的話,我們可以寫出下面這個短小精悍的程序來實現在所有的行中找出那些包含郵箱地址的行。
- while gets
- if /[a-zA-Z0-9\.\-_]
@[a-zA-Z0-9\.\-_]/- end
- end
但是,對于Ruby來說,這樣還不夠簡潔,我們可以這樣
- ARGF.each {|line| print line if
line =~ /[a-zA-Z0-9\.\-_]@[a-zA-Z0-9\.\-_]/ }
呵呵,怎么樣,吃驚了吧,一條語句就搞定了,Ruby奇特變量就是高效!
另外還有一個全局變量,$. 里面的內容是文件的總行數
還有其他的全局變量$&,&`,&' 這幾個全局變量分別用于正則表達式中。
當你用match或者=~去匹配一個字符串和一個正則表達式時,結果是:$&存放字符串中匹配正則表達式的部分,$`存放字符串中$&部分的前一個字符串,$'存放字符串中$&部分的后一個字符串。
比如
- str="good day! woodfish1988@
163.com It's a email"- reg=/[a-zA-Z0-9\-\._]+@
[a-zA-Z0-9\-\._]+/- reg=~str
- puts $`,$&,$'
結果是
good day!
woodfish1988@163.com
It's a email
同時,在匹配后全局標量$1..$9里面存放的匹配于正則表達式中的各個小內容(也就是由括號括起來的內容,具體請看正則表達式教程)
例如:
- code="<a href='http://
www.google.com'>Google</a>"- reg=/<a href='(.+)'>(.+)<\/a>/
- reg=~code
- puts $1,$2
結果是
http://www.google.com
Google
以上就是對Ruby奇特變量的具體介紹。