2017-07-15 43 views

回答

2

要求/負載是不一樣的直接複製文件粘貼到IRB。你確實運行該文件,但文件在ruby中有自己的作用域。您創建的本地變量john的範圍是該文件。這意味着當你定義它時,它在文件中可用,但不在其外部。這是一個很好的特性:假設你有一個不同的文件,創建一個Dog類並分配​​。當你加載該文件時,它會改變第一個文件中john的分配,破壞取決於john的任何代碼。許多Ruby程序包含數百個文件 - 你可以想象這將是如何痛苦的。這是同樣的事情時,你有兩種方法

def method1 
    john = Dog.new 
end 

def method2 
    john = Person.new 
    method1() 
    puts john 
end 

我們希望能夠定義變量,並與他們做的事情,而不必擔心我們稱之爲將改變他們的其他代碼。如果你打電話給method2,你會看到john仍然是Person。如果調用其他方法可能會改變你的局部變量,那麼很難推斷髮生了什麼。

文件內部的局部變量僅限於那些文件,就像局部變量一樣,方法僅限於那些方法。如果你想在文件外訪問它們,只需使它們成爲常量。

JOHN = Person.new 
+1

謝謝!但是'class'沒有作用於文件? – stackjlei

+1

'class'是一個關鍵字,*必須*給定一個常量。如果你嘗試'上課人;結束'你會得到一個語法錯誤。紅寶石常量是以大寫字母開頭的標識符。 'person'是一個變量'Person'是一個常數。常量與局部變量有不同的詞法範圍:它們可以通過它們在任何子模塊中定義的模塊進行訪問。如果它們在您的示例中在任何模塊之外定義,則它們是全局可用的。 –

相關問題