溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Lua有哪幾種變量類型

發(fā)布時間:2021-10-18 10:22:41 來源:億速云 閱讀:214 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關(guān)Lua有哪幾種變量類型,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

常用命令

查看版本

lua -v

進(jìn)入交互模式(ctrl+D退出)

lua -i


變量類型

Lua有8種變量類型

Lua有哪幾種變量類型

type函數(shù)可以返回變量的類型

> a=true
> type(a)
boolean

tonumber 函數(shù)可以將字符串轉(zhuǎn)成數(shù)字

> 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,變量將被垃圾回收,  垃圾回收機(jī)制是自動的,通常不需要手動進(jìn)行垃圾回收,有一個 collectgarbage()的函數(shù)。

falsenil是lua唯二的falsy值,這意味著 -1 這種在PHP中為false的值在Lua是真值。

邏輯運(yùn)算符

> a = (1>2) and 1 or 2 --等同于其他語言的三元運(yùn)行符 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

Table 類型

> 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下的元素可以是任何值,甚至可以是函數(shù),如:

> t.fun=print
> t.fun('hello')
hello


跟php的數(shù)組類型類似,table可以表示其他語言的數(shù)組和hash(字典),

注意:lua的數(shù)組并不是一個特殊的變量類型,而只是table的一種形式,并且Lua數(shù)組的索引從1開始,而非0

> t1={1,2,3}
> t1[1]
1
> t2={a = 1, b = 2}
> t2.a
1

#取數(shù)組長度,也可以取字符串的升序,但對hash類型的table長度似乎不行,會返回0 ,怎么?。?@todo)

> =#t1
3

table 變量類型可以是任何lua支持的類型,甚至可以是函數(shù),比如:

> t={x=print}
> t.x('hello')
hello

如果想要指定non-identifiers(非標(biāo)志符?) 作為Tablekey ,需要用[]表示

> t2={[34]=123,[true]=321}
> t2[34]
123
> t2[true]
321

Lua操作符

<    >    <=    >=    ==    ~=

所有這些操作符產(chǎn)生的結(jié)果都是true或者false

'=='檢查是否相等,'~='檢查是否不等。這兩個操作符可以作用于任意的兩個值。如果要比較的兩個值是不同的類型,那么Lua認(rèn)為它們是不等的。否則,Lua根據(jù)它們的類型來比較它們是否相等。特例,nil只等于它本身。

Lua根據(jù)引用來比較table, userdata, function,也就是說,只有二者是同一個對象的時候,它們才相等。例如:

a = {}; a.x = 1; a.y = 0
b = {}; b.x = 1; b.y = 0
c = a

執(zhí)行下上面的代碼,你可以得到, a == c, 但是 a ~= b

函數(shù)和閉包

閉包是指一個引用函數(shù)外定義的變量的函數(shù),而且這個變量不是Gobal的。

dofile('fn.lua')  --引入一個文件

如果調(diào)用時參數(shù)不夠,缺失的參數(shù)會賦值為 nil

如:

function fn(name1,name2,name3) 
    print(name1,name2,name3)
    return 0
end
fn('a','b')

打印 a b nil

如果調(diào)用參數(shù)多于定義參數(shù),多余的參數(shù)會被丟棄。

對返回值的處理也是類似:

function fn(name1,name2,name3) 
    -- print(name1,name2,name3)
    return 1,2
end
x,y,z = fn('a','b')
print (x,y,z)

打印結(jié)果

1	2	nil

匿名函數(shù)

v = function() return 0 end

本地函數(shù) 創(chuàng)建模塊時經(jīng)常會被使用。

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))

 結(jié)果:

4 
103

Chunk

lua執(zhí)行的每一塊語句,比如一個文件,一行代碼,一個函數(shù)都可以理解為一個chunk。

如果dofile引入一個文件chunk.lua,內(nèi)容如下

local x = 123
y=456
return 789

結(jié)果:

> dofile('chunk.lua')
789
> =y
456
> =x
nil

在交互模式下,每一條可執(zhí)行的語句是一個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

看完上述內(nèi)容,你們對Lua有哪幾種變量類型有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI