您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Lua有哪幾種變量類型,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
查看版本
lua -v
進入交互模式(ctrl+D退出)
lua -i
Lua有8種變量類型
type
函數可以返回變量的類型
> a=true > type(a) boolean
tonumber
函數可以將字符串轉成數字
> tonumber(33.3) 33.3 > tonumber('42') 42 > tonumber('hello') nil
Lua
的字符串是immutable
的,可以使用雙引號或單引號。
> x="hello" > y='world' > print(x,y) hello world > print("hello\nworld") hello world > x="\65\66\67\0" > x ABC
使用[[ ]]
表示多行字符串
> print([[ >> good >> or >> bad? >> ]]) good or bad?
如果將一個變量賦值為nil
,變量將被垃圾回收, 垃圾回收機制是自動的,通常不需要手動進行垃圾回收,有一個 collectgarbage()
的函數。
false
和nil
是lua唯二的falsy
值,這意味著 -1
這種在PHP中為false的值在Lua是真值。
> a = (1>2) and 1 or 2 --等同于其他語言的三元運行符 a= (1>2) ? 1 : 2 > a 2 > not a false > not not a true
> x,y=42,43 > x,y 42 43 > x,y,z=1,2 -- 不賦值的變量為nil > x,y,z 1 2 nil
> t={} > t.abc=33 > t.cde=44 > t table: 0x7ffd93f0df30 > t.fgh nil > t.abc 33
獲取一個未定義的元素,會返回nil
,但是嘗試獲取一個未定義的元素下的屬性,會拋出一個錯誤
> t.fgh.xyz stdin:1: attempt to index a nil value (field 'fgh') stack traceback: stdin:1: in main chunk [C]: in ? >
table下的元素可以是任何值,甚至可以是函數,如:
> t.fun=print > t.fun('hello') hello
跟php的數組類型類似,table
可以表示其他語言的數組和hash(字典),
注意:lua
的數組并不是一個特殊的變量類型,而只是table的一種形式,并且Lua數組的索引從1開始,而非0
> t1={1,2,3} > t1[1] 1 > t2={a = 1, b = 2} > t2.a 1
#
取數組長度,也可以取字符串的升序,但對hash類型的table長度似乎不行,會返回0 ,怎么取?(@todo)
> =#t1 3
table
變量類型可以是任何lua支持的類型,甚至可以是函數,比如:
> t={x=print} > t.x('hello') hello
如果想要指定non-identifiers(非標志符?)
作為Table
的key
,需要用[]
表示
> t2={[34]=123,[true]=321} > t2[34] 123 > t2[true] 321
< > <= >= == ~=
所有這些操作符產生的結果都是true或者false
'=='檢查是否相等,'~='檢查是否不等
。這兩個操作符可以作用于任意的兩個值。如果要比較的兩個值是不同的類型,那么Lua認為它們是不等的。否則,Lua根據它們的類型來比較它們是否相等。特例,nil只等于它本身
。
Lua根據引用來比較table, userdata, function,也就是說,只有二者是同一個對象的時候,它們才相等。例如:
a = {}; a.x = 1; a.y = 0 b = {}; b.x = 1; b.y = 0 c = a
執行下上面的代碼,你可以得到, a == c
, 但是 a ~= b
閉包是指一個引用函數外定義的變量的函數,而且這個變量不是Gobal
的。
dofile('fn.lua') --引入一個文件
如果調用時參數不夠,缺失的參數會賦值為 nil
如:
function fn(name1,name2,name3) print(name1,name2,name3) return 0 end fn('a','b')
打印 a b nil
如果調用參數多于定義參數,多余的參數會被丟棄。
對返回值的處理也是類似:
function fn(name1,name2,name3) -- print(name1,name2,name3) return 1,2 end x,y,z = fn('a','b') print (x,y,z)
打印結果
1 2 nil
匿名函數
v = function() return 0 end
本地函數
創建模塊時經常會被使用。
local function hi(name) print('hi ' .. name) end
閉包
function adder(x) return function (y) return x + y end end a1 = adder(1) a100 = adder(100) print(a1(3)) print(a100(3))
結果:
4 103
Chunk
lua執行的每一塊語句,比如一個文件,一行代碼,一個函數都可以理解為一個chunk。
如果dofile
引入一個文件chunk.lua
,內容如下
local x = 123 y=456 return 789
結果:
> dofile('chunk.lua') 789 > =y 456 > =x nil
在交互模式下,每一條可執行的語句是一個chunk
,一個local
的變量在下一個chunk
中不可見, 如:
> local x=3 > x nil -- 不可見
除非使用 ;
寫在同一個chunk
。
> local y=4; print(4) 4
lua 有兩種注釋方式
print("hello comment") -- 單行注釋 function hello() print("hello comment") --[[ 這是 多行 注釋 ]] end
//@to-be-continue
看完上述內容,你們對Lua有哪幾種變量類型有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。