區域性變數由小寫字母或下劃線(_)開頭.區域性變數不像全域性和實變數一樣在初始化前含nil值.
ruby> $foo
nil
ruby> @foo
nil
ruby> foo
err: (eval):1: undefined local variable or method `foo' for main(object)
對區域性變數的第一次賦值做的很像一次宣告.如果你指向乙個未初始化的區域性變數,ruby直譯器會認為那是乙個方法的名字;正如上面所見錯誤
資訊的.
一般的,區域性變數的範圍會是
proc
loop
def...end
class...end
module...end
整個程式(除非符合上面某個條件)
下面的例子,define?是乙個檢查識別符號是否已定義的操作符.如果已定義它將返回識別符號的描述,否則返回nil.正如你所見的,bar的範圍是
loop的區域性變數;當loop退出時,bar無定義.
ruby> foo = 44; print foo, "\n"; defined? foo
44 "local-variable"
ruby> loop; defined? bar
45 nil
乙個範圍內的過程物件共享這個範圍內的區域性變數.這裡,區域性變數 bar 由 main 和過程物件 p1, p2共享:
ruby> bar=0
0 ruby> p1 = proc
#ruby> p2 = proc
#ruby> p1.call(5)
5 ruby> bar
5 ruby> p2.call
5 注意開始的"bar=0"不能省略;此賦值允許bar的範圍被 p1和 p2共享.不然 p1, p2 將會分別生成並處理它們自己的區域性變數 bar, 呼叫 p2
也將導致"未定義區域性變數或方法"錯誤.
過程物件的強大在於它們能被作為引數傳遞:共享的區域性變數即使傳遞出原範圍也仍然有效.
ruby> def box
| contents = 15
| get = proc
| set = proc
| return get, set
| end
nil
ruby> reader, writer = box
[#, #]
ruby> reader.call
15 ruby> writer.call(2)
2 ruby> reader.call
2 ruby對待範圍的辦法相當聰明.顯然,上面例子裡 contents 變數是由 reader 和 writer 共享的.我們也可以像上面那樣創造多對使用box的
reader-writer;每一對共享乙個 contents 變數,對之間不相干擾.
ruby> reader_1, writer_1 = box
[#, #]
ruby> reader_2, writer_2 = box
[#, #]
ruby> writer_1.call(99)
99 ruby> reader_1.call
99 ruby> reader_2.call
15
成員變數 區域性變數
成員變數 作為類的成員而存在,直接存在於類中。所有類的成員變 量可以通過this來引用。區域性變數 作為方法或語句塊的成員而存在,存在於方法的引數列表和方法定義中。1.成員變數可以被 public,protect,private,static等修飾符修飾,而 區域性變數不能被控制修飾符及 stati...
成員變數 區域性變數
一.相同點 1.都遵循變數的宣告格式 修飾符 資料型別 變數名 初始化值 2.都有各自的作用域 二.不同點 1.宣告的位置不同 成員變數 宣告在類內,方法外。區域性變數 宣告在方法內 方法的形參部分 塊內 2.成員變數的修飾符有四個 public private protected 預設 區域性變數...
靜態區域性變數
在區域性變數前加上 static 關鍵字,就成了靜態區域性變數。靜態區域性變數存放在記憶體的全域性資料區。函式結束時,靜態區域性變數不會消失,每次該函式呼叫時,也不會為其重新分配空間。它始終駐留在全域性資料區,直到程式執行結束。靜態區域性變數的初始化與全域性變數類似 如果不為其顯式初始化,則c 自動...