91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Lua有哪幾種變量類型

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

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

常用命令

查看版本

lua -v

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

lua -i


變量類型

Lua有8種變量類型

Lua有哪幾種變量類型

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()的函數。

falsenil是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

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

> 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(非標志符?) 作為Tablekey ,需要用[]表示

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

Lua操作符

<    >    <=    >=    ==    ~=

所有這些操作符產生的結果都是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有哪幾種變量類型有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台东市| 锡林浩特市| 古交市| 巴彦淖尔市| 延安市| 关岭| 本溪| 大新县| 绵阳市| 安阳县| 海门市| 棋牌| 波密县| 新乡县| 金昌市| 扎鲁特旗| 加查县| 武义县| 荔波县| 梨树县| 梓潼县| 兰坪| 新巴尔虎右旗| 台湾省| 涿州市| 平乡县| 辽宁省| 阿城市| 抚顺县| 遵化市| 清水县| 康马县| 宜良县| 越西县| 年辖:市辖区| 固安县| 卓尼县| 射洪县| 石狮市| 饶阳县| 连州市|