全方位解讀Ruby局部變量應(yīng)用
在Ruby語(yǔ)言中部高,存在著一些變量。對(duì)于一個(gè)初步學(xué)習(xí)Ruby語(yǔ)言的朋友來(lái)說(shuō),應(yīng)該熟練的掌握這些變量的運(yùn)用。下面就為大家介紹一下Ruby局部變量的應(yīng)用技巧。#t#
Ruby局部變量由小寫(xiě)字母或下劃線(_)開(kāi)頭.局部變量不像全局和實(shí)變量一樣在初始化前含nil值.
- ruby> $foo
 - nil
 - ruby> @foo
 - nil
 - ruby> foo
 - ERR: (eval):1:
undefined local
variable or method
`foo' for main(Object) 
對(duì)Ruby局部變量的第一次賦值做的很像一次聲明.如果你指向一個(gè)未初始化的局部變量,Ruby解釋器會(huì)認(rèn)為那是一個(gè)方法的名字;正如上面所見(jiàn)錯(cuò)誤信息的. 一般的,局部變量的范圍會(huì)是
- proc{...}
 - loop{...}
 - def...end
 - class...end
 - module...end
 
整個(gè)程序(除非符合上面某個(gè)條件)
下面的Ruby局部變量例子,define?是一個(gè)檢查標(biāo)識(shí)符是否已定義的操作符.如果已定義它將返回標(biāo)識(shí)符的描述,否則返回nil.正如你所見(jiàn)的,bar的范圍是 loop的局部變量;當(dāng)loop退出時(shí),bar無(wú)定義.
- ruby> foo = 44; print foo,
 
"\n"; defined? foo- 44
 - "local-variable"
 - ruby> loop{bar=45; print bar,
 
"\n"; break}; defined? bar- 45
 - nil
 
一個(gè)范圍內(nèi)的過(guò)程對(duì)象共享這個(gè)范圍內(nèi)的Ruby局部變量.這里,局部變量 bar 由 main 和過(guò)程對(duì)象 p1, p2共享:
- ruby> bar=0
 - 0
 - ruby> p1 = proc{|n| bar=n}
 - #<Proc:0x8deb0>
 - ruby> p2 = proc{bar}
 - #<Proc:0x8dce8>
 - ruby> p1.call(5)
 - 5
 - ruby> bar
 - 5
 - ruby> p2.call
 - 5
 
注意開(kāi)始的"bar=0"不能省略;此賦值允許bar的范圍被 p1和 p2共享.不然 p1, p2 將會(huì)分別生成并處理它們自己的局部變量 bar, 調(diào)用 p2 
也將導(dǎo)致"未定義局部變量或方法"錯(cuò)誤. 
過(guò)程對(duì)象的強(qiáng)大在于它們能被作為參數(shù)傳遞:共享的Ruby局部變量即使傳遞出原范圍也仍然有效.
- ruby> def box
 - | contents = 15
 - | get = proc{contents}
 - | set = proc{|n| contents = n}
 - | return get, set
 - | end
 - nil
 - ruby> reader, writer = box
 - [#<Proc:0x40170fc0>,
 
#<Proc:0x40170fac>]- ruby> reader.call
 - 15
 - ruby> writer.call(2)
 - 2
 - ruby> reader.call
 - 2
 
Ruby對(duì)待范圍的辦法相當(dāng)聰明.顯然,上面例子里 contents 變量是由 reader 和 writer 共享的.我們也可以像上面那樣創(chuàng)造多對(duì)使用box的 
reader-writer;每一對(duì)共享一個(gè) contents 變量,對(duì)之間不相干擾.
- ruby> reader_1, writer_1 = box
 - [#<Proc:0x40172820>,
 
#<Proc:0x4017280c>]- ruby> reader_2, writer_2 = box
 - [#<Proc:0x40172668>,
 
#<Proc:0x40172654>]- ruby> writer_1.call(99)
 - 99
 - ruby> reader_1.call
 - 99
 - ruby> reader_2.call
 - 15
 
以上就是對(duì)Ruby局部變量的一些詳細(xì)介紹。















 
 
 

 
 
 
 