[Lua] 直譯器中宣告的 local 變數,值突然消失了?

[Lua] 直譯器中宣告的 local 變數,值突然消失了?

剛開始學 Lua,

發現一個 Lua 直譯器和 Python 直譯器很大的不同,

是變數的範圍 (scope) 問題…

(不過可能也算是語言上的差異造成的)

 

在 Lua 直譯器中,執行下面的程式,

將 a 指定成 1,然後很莫名的下一個敘述會說 a 是 nil:

> local a = 1
> a
nil

 

這真的是太奇怪了,才剛設好就壞掉?!

又試了一下,長的很像的程式,卻又可以?

> b = 2
> b
2

 

弄了半天,才發現是 Lua 的 local 敘述造成的。

local 代表這是一個區域變數,而在 Lua 直譯器裡,

看來那個 local 的範圍就只有 local 那一行而已。

當沒有指定 local 時,它會是全域變數,因此就沒有問題。

 

這件事情在一般的 Lua 程式裡,倒是不會造成問題,

因為 local 的範圍會是宣告變數的函式之內,

不會有宣告完,下一秒拿不到值的這種詭異現象。

 

而基本上 Python 沒有 local 這種語句,

因此 Lua 直譯器搭配 local 造成的這種奇怪現象,

還真的是讓我困惑許久呢…

(本頁面已被瀏覽過 248 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料