2014-07-18 43 views
8

變量作用域行爲似乎很奇怪。代碼塊朱莉婭:變量未定義

tp = 1 
function test2() 
    println(tp) 
end 

工作得很好,而

function test() 
    if tp==0 
     tp=tp-1 
    end 
end 

給 「TP沒有定義」 例外。哪裏不對?

回答

11

這是由於棘手的方式變量是隱含定義爲局部或全局,而且定義在功能後均可影響其作用域在全功能的事實。

在第一種情況下,tp默認爲全局變量,它的工作方式與您的預期相同。但是,在第二種情況下,您轉讓tp。這一點,因爲在手動的scope of variables section指出:

「的分配x = y介紹x只有x既不聲明全局和之前或後的電流通過任何封閉範圍內引入當地一個新的局部變量代碼行「。

因此,通過分配給tp,您已隱式地將其聲明爲局部變量!它現在將影響您的全球定義...除了您嘗試首先訪問它。解決方法很簡單:如果你想分配給他們明確聲明的任何變量是全球性的:

function test() 
     global tp 
     if tp==0 
      tp=tp-1 
     end 
    end 

這裏的行爲是細緻入微的精細,但它是非常一致的。我知道,在我終於明白這是如何工作之前,我通過手冊的那部分內容讀了一些內容。如果你能想出一個更好的方式來形容它,請說點什麼!