ruby **
class a
const = "ok"
class b
const = "ko"
p const.object_id
endp const.object_id
end
如果你在irb中敲入上面的程式,可以發現,兩次的object_id是不同的,雖然我們在b中可以看到上層目錄中定義的const,而且可以列印出它的值,但是想要給c賦值就是另外一回事了,ruby並不會認為這是在給上層目錄中的c賦值,而是認為這是在目錄a::b中新建了乙個常量c,因為常量是不允許多次賦值的,這樣自然不難理解為什麼兩者的object_id不一樣了。
讓我們多做一點兒嘗試:
ruby **
class a
const = "ok"
def meth
const = "ko"
endend
當我們在方法中試圖改變乙個常量的值得時候,程式會報錯,這是顯然的結果,但是從這裡可以看出來,雖然在變數的可視區域上方法和類沒有什麼區別,但是在對變數的操作時,兩者的區別還是很明顯的。
讓我們再來點兒其他好玩兒的嘗試:
ruby **
class a
const = "ok"
class b
p a::const
const = "ko"
p const.object_id
endp const.object_id
endclass a
const = "ok"
class b
const = "ko"
endp a::b::const.object_id
p a::const.object_id
end
可以看到,我們可以通過命名空間(或者叫目錄結構)來訪問任意目錄下定義的常量,當不指定目錄結構的時候,首先從當前目錄開始尋找,然後依次向上。
Ruby變數作用域的類目錄結構(補二)
ruby中,類中可以定義類,類中可以定義方法,方法中可以定義方法,但是方法中不能定義類。在前面寫的 ruby變數作用域的類目錄結構 和 ruby變數作用域的類目錄結構 補 中聊到了前兩種情況下變數可視域的問題,關於ruby中可以在方法中定義方法這個細節,我也是今天才知道。首先,ruby的方法中不能定...
Ruby 標識名和變數作用域
ruby 的標識名用來指向常量,變數,方法,類和模組。標識名的首字母用來幫助我們確定標識所指向內容的作用域。ruby 的標識名區分大小寫。ruby 使用乙個約定的來幫助它區別乙個名字的用法 a 名字前面的第乙個字元表明這個名字的用法。b 區域性變數 方法引數和方法名稱應該用乙個小寫字母開頭或者用乙個...
python和ruby變數作用域對比
python 1 a 0 2def f 3 a 9 4print a56 f 7 print a 列印出來是9和0 a 0 deff print af print a 列印出來是0和0 python呼叫f函式,執行print a的時候,會先在函式的作用域裡查詢是否有a這個變數,沒有找到再到全域性的作...