指定教學

lua-users home
wiki

指定值

設定變數值為指定

> x = 1
> y = "hello"
> print(x,y)
1       hello
您可以在參考手冊的第 2.4.3 節了解指定[1]

多重指定

在 Lua 中,我們可以在單一陳述式中進行多重指定,例如:

> x, y = 2, "there"
> print(x,y)
2       there 
右手邊的值清單指定給左手邊 = 的變數清單。我們可以隨意指定值,而且類型不一定要相同,例如:
> a,b,c,d,e,f = 1,"two",3,3.14159,"foo",{ this="a table" }
> print(a,b,c,d,e,f)
1       two     3       3.14159 foo     table: 0035BED8

等號右側的值可以是表達式,例如 i+1。但是,左側的值不行。

如以下說明,多重指定會帶來幾個警告。

評估在指定之前執行

任何表達式會先評估。評估的表達式隨後指定。

> i = 7
> i, x = i+1, i
> print(i, x)
8       7

當 Lua 到達第二行時會評估表達式 i+1i。評估後,第二行變成 i, x = 8, 7。然後,它從右至左執行指定。(指定順序請參閱下文)。

交換值

值指定就好像所有指定都同時進行。因此,您可以使用多重指定換換變數值。

> a,b = 1,2  -- set initial values
> print(a,b)
1       2
> a,b = b,a  -- swap values around
> print(a,b)
2       1
> a,b = b,a  -- and back again
> print(a,b)
1       2
請注意,不需要暫時性變數(例如 bold = b; b = a; a = bold;)。C 語言程式設計中會常用到這種暫時性變數;但在 Lua 中沒有必要。

指定順序

執行多重指定順序未定義。這表示您不應該假設指定是從左至右進行。如果在指定清單中出現相同的變數或表格參照兩次,結果可能會讓您大吃一驚。

> a, a = 1, 2
> print(a)
1
在上述範例中,Lua 從右至左指定,例如 a=2,然後是 a=1。但我們不應仰賴 Lua 的未來版本保持一致。如果您看重指定順序,應使用個別指定陳述式。

清單大小不符

如果一個值清單比變數清單長,會忽略額外值。

> a,b,c = 1,2,3,4,5,6
> print(a,b,c)
1       2       3

如果一個值清單比變數清單短,Lua 會將 nil 值指定給沒有值的變數。

> a,b,c,d = 1,2
> print(a,b,c,d)
1       2       nil     nil

變更記錄 · 喜好設定
編輯 · 歷史
上次編輯於 2016 年 6 月 29 日星期三凌晨 2:29 GMT (差異)