国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

lua變量、數(shù)據(jù)類型、if判斷條件和數(shù)據(jù)結(jié)構(gòu)table以及【lua 函數(shù)】

這篇具有很好參考價(jià)值的文章主要介紹了lua變量、數(shù)據(jù)類型、if判斷條件和數(shù)據(jù)結(jié)構(gòu)table以及【lua 函數(shù)】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


一、lua變量【 全局變量和局部變量和表中的域】

Lua 變量有三種類型:全局變量局部變量表中的域

? 全局變量:默認(rèn)情況下,Lua中所有的變量都是全局變量。

? 局部變量:使用local 顯式聲明在函數(shù)內(nèi)的變量,以及函數(shù)的參數(shù),都是局部變量。在函數(shù)外即使用local去聲明,它的作用域也是當(dāng)前的整個(gè)文件,這相當(dāng)于一個(gè)全局變量。

? 表中的域:變量的默認(rèn)值均為 nil。

? Lua語言不區(qū)分未初始化變量和被賦值為nil的變量,因此全局變量無須聲明即可使用。


1、全局變量

全局變量,不需要聲明,只需要將一個(gè)值賦予一個(gè)全局變量即可創(chuàng)建了。

b=10 	-- 這個(gè)b就是一個(gè)全局變量了
print(b)
  • 通常沒必要?jiǎng)h除一個(gè)全局變量,如果一個(gè)變量生存周期較為短,使用局部變量即可。不過,如果真的想刪除全局變量的話,只需將它賦值為nil。
b=nil 	-- 這個(gè)全局變量b就被刪除了
print(b)

2、局部變量-使用local 聲明

  • Lua 中的變量全是全局變量,哪怕是語句塊或是函數(shù)里,除非用 local 顯式聲明為局部變量。

  • 局部變量的作用域?yàn)閺穆暶魑恢瞄_始到所在語句塊結(jié)束。

建議:在Lua中,應(yīng)盡可能使用局部變量,好處:

  1. 避免命名沖突
  2. 訪問局部變量的速度比全局變量更快

3、lua表中的域

a = {}
a[10] = 1
for i=1,15,1 do
	print(a[i])
end
  • 結(jié)果:

二、lua數(shù)據(jù)類型、if判斷條件

Lua 是動(dòng)態(tài)類型語言,變量不要類型定義,只需要為變量賦值。 值可以存儲(chǔ)在變量中,作為參數(shù)傳遞或結(jié)果返回。

1、Lua 中有 8 個(gè)基本類型分別為:nil、boolean、number、string、userdata、function、thread 和 table。

數(shù)據(jù)類型 描述
nil 空值,只有值nil屬于該類,表示一個(gè)無效值在條件表達(dá)式中相當(dāng)于false)。
boolean 布爾類型
number 數(shù)值類型,相當(dāng)于C語言的double
string 字符串類型,由一對(duì)雙引號(hào)或單引號(hào)來表示
function 函數(shù)類型,由 C 或 Lua 編寫的函數(shù)
table Lua 中的表(table)其實(shí)是一個(gè)"關(guān)聯(lián)數(shù)組"(associative arrays),數(shù)組的索引可以是數(shù)字、字符串或表類型。在 Lua 里,table 的字面量是用{} 表示。 {},表示創(chuàng)建一個(gè)空表。
thread 線程類型,表示執(zhí)行的獨(dú)立線路,用于執(zhí)行協(xié)同程序
userdata 表示任意存儲(chǔ)在變量中的C數(shù)據(jù)結(jié)構(gòu)

2、type(變量名)

  • 作用:獲取該變量的類型

3、lua 的if 判斷條件是理解為是否有效

?什么時(shí)候會(huì)【無效】錯(cuò)誤失敗---為nil和false的時(shí)候

  • nil 表示空值、無效值

?其他情況為數(shù)字、字符串、true、表(甚至是空表也是正確的),判斷條件都是【有效】正確成功的!



三、lua數(shù)據(jù)結(jié)構(gòu)-table

0、table的字面量:{},創(chuàng)建的空表,內(nèi)部的域默認(rèn)值是nil。

  • 表用大括號(hào){}來構(gòu)造,可以是多維的 {{}}。

1、lua中的表,其實(shí)是一個(gè)"關(guān)聯(lián)數(shù)組",關(guān)聯(lián)數(shù)組是一種具有特殊索引的數(shù)組,數(shù)組的索引可以是數(shù)組、字符串、表等[除了nil]。

  • 表中的元素是鍵值對(duì)形式。key 也就是數(shù)組的索引。表的key是唯一的。表是可以自定義鍵名。

2、table 是沒有固定大小的,可以添加任意數(shù)量的元素到數(shù)組中。

3、table 是lua中最主要的數(shù)據(jù)結(jié)構(gòu)機(jī)制,也是唯一的數(shù)據(jù)結(jié)構(gòu)。用它可以實(shí)現(xiàn)數(shù)組,哈希表、集合、字典等等。還可以通過table 表示對(duì)象、包、模塊。

其實(shí)lua 中的table 概念,相當(dāng)于java中的對(duì)象的概念。萬物皆是對(duì)象。

4、表中元素的刪除,有兩種方式:直接設(shè)置為nil或調(diào)用remove方法刪除

  • 兩種刪除方式的區(qū)別:直接把元素賦值為nil,會(huì)留下空位,不影響其他元素。而用remove函數(shù)去刪除,會(huì)把后面的元素往前移,補(bǔ)位。

5、表中元素有多少個(gè),可以使用#獲取

6、表中的索引是從1開始的

tb={'干飯', '吃飯', '恰飯'}
  • 實(shí)際上,tb如下:
-- tb的情況如下:
-- 地址table(c917ad2)
{
 [1] = '干飯',
 [2] = '吃飯',
 [3] = '恰飯',
}

7、表有自定義鍵的時(shí)候:

-- 表中只寫了值value作為元素
tb={'干飯', '吃飯', '恰飯', s='溜達(dá)'}
  • 實(shí)際上,表是有默認(rèn)分配鍵key的,默認(rèn)分配的鍵是從數(shù)字1開始的,tb表中的分配如下:
-- tb的情況如下:
-- 地址table(c917ad3)
{
 [1] = '干飯',
 [2] = '吃飯',
 [3] = '恰飯',
 ['s'] = '溜達(dá)',--細(xì)節(jié):s會(huì)被帶上引號(hào)
}

細(xì)節(jié):要通過自定義的s鍵獲取到值,s是要加上引號(hào)的。


對(duì)于自定義的鍵有一個(gè)語法糖,中括號(hào)可以使用點(diǎn)代替


表中默認(rèn)分配的鍵和自定義鍵的執(zhí)行順序是:默認(rèn)的先執(zhí)行,然后再是自定義的鍵

-- 表中只寫了值value作為元素
tb={'干飯',a='溜達(dá)',b='哈哈哈', _='餓了么','吃飯', '恰飯'}
  • 實(shí)際上,tb表中的分配如下:程序分配鍵的時(shí)候,會(huì)先跳過自定義鍵,再接著分配。
-- tb的情況如下:
-- 地址table(c917ad3)
{
 [1] = '干飯',
 [2] = '吃飯',
 [3] = '恰飯',
 ['a'] = '溜達(dá)',
 ['b'] = '哈哈哈',
 ['_'] = '餓了么',
}
  • 結(jié)果:

8、table 提供的增刪元素的方法 table.insert 和 table.remove

  • table.insert(表名,要增加的鍵位,要增加的值) 直接再最后的位置增加元素:table.insert(表名,要增加的值)

  • table.remove(表名,要?jiǎng)h除的鍵位)



四、lua 函數(shù)(形參-實(shí)參數(shù)數(shù)量不匹配、多重返回值、不定長參數(shù)、方法的冒號(hào)和點(diǎn)-self隱式參數(shù))

0、lua 程序是嚴(yán)格從上到下的順序執(zhí)行代碼的, 函數(shù)的聲明必須在寫函數(shù)調(diào)用前面。


在lua中,函數(shù)是作為第一類型,函數(shù)是可以存在在變量中,也可以通過參數(shù)傳遞給其他函數(shù),還可以作為其他函數(shù)的返回值,還可以作為table表中的鍵

1、函數(shù)定義的方式

-- 方式1:
function 函數(shù)名(參數(shù)列表)
	函數(shù)內(nèi)容
end


-- 方式2:
函數(shù)名=function(參數(shù)列表)
	函數(shù)內(nèi)容
end

2、lua 函數(shù)

① 函數(shù)是可以存在在變量中【匿名函數(shù)

a = function(x, y)
	return x * y
end
b = a
print(b(2,3))
  • 結(jié)果:

    6

? 在table中也可以存在function函數(shù)

tab = {
	test=function()
		print("Hello World!")
	end
}
tab.test()
  • 結(jié)果:

Hello World!

3、形參-實(shí)參數(shù)數(shù)量不匹配

  • 傳入的實(shí)參數(shù)量 > 定義的形參數(shù)量:多傳入的參數(shù),直接被忽略了
  • 傳入的實(shí)參數(shù)量 < 定義的形參數(shù)量:缺少的參數(shù),使用nil替補(bǔ)

4、多重返回值

  • 舉例1:

  • 舉例2:
  • 小細(xì)節(jié):多個(gè)具有多重返回值的函數(shù)連續(xù)調(diào)用[使用,間隔],只有最后一個(gè)函數(shù)被展開,即最后一個(gè)函數(shù)才有資格返回多個(gè)值,其他函數(shù)都默認(rèn)返回第一個(gè)值

5、不定長參數(shù)

  • 和java 一樣,不定長參數(shù)使用...表示,并且作為函數(shù)的最后一個(gè)參數(shù)。
  • select 函數(shù)來訪問變長參數(shù)了
    • select('#', …) 返回可變參數(shù)的長度。
    • select(n, …) 用于返回從起點(diǎn) n 開始到結(jié)束位置的所有參數(shù)列表。

6、方法的冒號(hào)和點(diǎn)-self隱式參數(shù)

? Lua 定義或調(diào)用方法時(shí)的語法糖-冒號(hào),表示參數(shù)self

這個(gè)語法糖是用冒號(hào),表示self,相當(dāng)于java中的this

■ 舉例1:

--定義
Account = { balance = 0 }
--withdraw 方法有兩個(gè)參數(shù),一個(gè)self【相當(dāng)于java中的this】是指向當(dāng)前table的Account 
function Account.withdraw(self, v)
         self.balance = self.balance - v
end
--等價(jià)寫法:
function Account:withdraw(v) --通過冒號(hào),表示定義了第一個(gè)參數(shù)是self
         self.balance = self.balance - v
end

--調(diào)用
Account.withdraw(self, 100)
--等價(jià)寫法
Account:withdraw(100)        

■ 舉例2:

-- 在table的鍵值對(duì)的value---是function的時(shí)候,方法的參數(shù)是self,并且還將self 參數(shù)傳遞給function方法體的另外一個(gè)方法
-- {} 在lua中表示table
tbWnd.tbOnClick = {
    btnOk = function(self)
        self:onClickOK() -- 相當(dāng)于onClickOK(self)
    end,
}

7、函數(shù)嵌套調(diào)用,并且作為參數(shù)的那個(gè)函數(shù),它是需要有參數(shù)傳入

① 通過將參數(shù)存儲(chǔ)到table中,table又綁定上的函數(shù),該函數(shù)就可以通過self.key 拿到參數(shù)

② 然后外層的函數(shù)(func,table)

local tbTable = {}
tbTable.key1  = 1
function tbTable:func1()--這樣寫,隱式參數(shù)是self
    print(self.key1)
end


-- 函數(shù)嵌套調(diào)用
function func2(func,tbSelf)
    func(tbself)
end

-- 執(zhí)行
func(tbTable.func1)

8、函數(shù)返回值為空,nil 可以省略,return nil 也可以省略


9、函數(shù)的括號(hào)在只有一個(gè)參數(shù)[并且參數(shù)是字符串或者表]的情況下可以省略不寫

  • 一般是在調(diào)用的時(shí)候,明確已經(jīng)參數(shù)是字符串或者表,才可以省略括號(hào)
-- 舉例1:
print("Hello") --> print "Hello"


-- 舉例2:
function func (num)
	print(num)
end

func "hello"
func {1,2,3}
  • 細(xì)節(jié):不知道參數(shù)類型的情況下,是不可以省略括號(hào)的



? 五、lua 函數(shù)常見寫法

1、直接構(gòu)建

function func(...)
    print(...)
end

-- 調(diào)用函數(shù)
func(123)

2、表構(gòu)建,key存儲(chǔ)函數(shù)(1)

local tbTable = {}
function tbTable.func1(...)
    print(...)
end

function tbTable.func2(...)
    print(...)
end

-- 調(diào)用函數(shù)
tbTable.func1(123)
tbTable.func1(4,5,6)

3、表構(gòu)建,key存儲(chǔ)函數(shù)(2)

local tbTable = {}

tbTable.func1 = function(...)
    print(...)
end

tbTable.func2 = function(...)
    print(...)
end

-- 調(diào)用函數(shù)
tbTable.func1(123)
tbTable.func1(4,5,6)

4、表構(gòu)建,key存儲(chǔ)函數(shù)(3)

local tbTable = {
    func1 = function(...)
    	print(...)
	end,
    func2 = function(...)
    	print(...)
	end
}

-- 調(diào)用函數(shù)
tbTable.func1(123)
tbTable.func1(4,5,6)



六、函數(shù)嵌套|閉包

1、local 特點(diǎn):

局部變量:使用local 顯式聲明在函數(shù)內(nèi)的變量,以及函數(shù)的參數(shù),都是局部變量。

在函數(shù)外即使用local去聲明,它的作用域也是當(dāng)前的整個(gè)文件,這相當(dāng)于一個(gè)全局變量。


2、函數(shù)嵌套|閉包

(1) 特點(diǎn):函數(shù)的調(diào)用是用() 表示,有多少層,函數(shù)真正調(diào)用就需要多少個(gè)()

(2) 舉例子:

  • 舉例子1:
local f = function(n)
	return function(x)
		return x+n
	end
end

print(f(1)(2)) -- 函數(shù)嵌套,每一層都相當(dāng)于()

a = f(1)
print(a(10))
  • 結(jié)果:

    3
    11


  • 舉例子2:local 在函數(shù)外相當(dāng)于java的全局變量【獨(dú)立的作用域強(qiáng)調(diào)的就是這個(gè)在函數(shù)外面的local 變量】
local p = 1
local f = function()
	local v = 0 -- local 在[下面的]函數(shù)外面相當(dāng)于java的全局變量
	return function()
		v = v + p
		print(v)
	end
end	

a,b = f(), f()
a(); b();
p = 2
a(); b();
  • 結(jié)果:

    1

    1

    3

    3

  • local 在函數(shù)外相當(dāng)于java的全局變量【獨(dú)立的作用域

class A{
   private int v; -- 全局變量
   public void add(){}
}

  • 舉例子3:
local f = function()
	return {
        add = function(a,b)
			return a + b
	   end,
        sub = function(a,b)
			return a - b
	   end,
    }
end	

v = f()
print(v.add(1,2))
print(v.sub(2,1))
  • 結(jié)果:

    3
    1




如果本文對(duì)你有幫助的話記得給一樂點(diǎn)個(gè)贊哦,感謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-417838.html

到了這里,關(guān)于lua變量、數(shù)據(jù)類型、if判斷條件和數(shù)據(jù)結(jié)構(gòu)table以及【lua 函數(shù)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python條件判斷語句(if else)

    python條件判斷語句(if else)

    ? ? ? ? python中判斷語句的基本結(jié)構(gòu)由if和else組成,當(dāng)if后面的條件為真時(shí),執(zhí)行if下面的語句;當(dāng)if后面的條件為假時(shí),執(zhí)行else下面的語句。這里條件的真假都是用bool值來作為依據(jù)的,我們知道比較運(yùn)算、成員運(yùn)算、身份運(yùn)算返回的結(jié)果都是bool值。所以比較運(yùn)算、成員運(yùn)算

    2024年02月09日
    瀏覽(21)
  • SQL中的單條件判斷函數(shù)IF,和多條件判斷CASE WHEN的用法

    SQL中的單條件判斷函數(shù)IF,和多條件判斷CASE WHEN的用法

    在SQL中,條件判斷函數(shù)IF用于根據(jù)指定的條件返回不同的值。 condition:要判斷的條件。 value_if_true:如果條件為真,則返回的值。 value_if_false:如果條件為假,則返回的值。 假設(shè)有如下名為studensts的表,包含id、name和score字段: 我們想根據(jù)學(xué)生的分?jǐn)?shù)判斷是否及格,并返回相

    2024年02月11日
    瀏覽(60)
  • shell 腳本中 if 各種條件判斷的使用

    1.1 if-elif-else語法格式 1.2 if-else語法格式 1.3 if語法格式 示例: 運(yùn)行結(jié)果: 示例: 運(yùn)行結(jié)果: 示例: 運(yùn)行結(jié)果: 示例: 運(yùn)行結(jié)果:

    2024年02月17日
    瀏覽(21)
  • MySQL中使用IF子查詢實(shí)現(xiàn)條件判斷(where之后用if)

    廢話不多說,直接上代碼

    2023年04月23日
    瀏覽(33)
  • MATLAB知識(shí)點(diǎn):if條件判斷語句的嵌套

    MATLAB知識(shí)點(diǎn):if條件判斷語句的嵌套

    ??講解視頻:可以在bilibili搜索《MATLAB教程新手入門篇——數(shù)學(xué)建模清風(fēng)主講》。? MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講,適合零基礎(chǔ)同學(xué)觀看)_嗶哩嗶哩_bilibili 節(jié)選自?第4章:MATLAB程序流程控制 我們通過一個(gè)經(jīng)典例題來理解if的嵌套,所謂if的嵌套,是指在if、els

    2024年04月09日
    瀏覽(21)
  • python基礎(chǔ)語法(print、數(shù)據(jù)類型、變量、注釋、輸入、條件語句)

    python基礎(chǔ)語法(print、數(shù)據(jù)類型、變量、注釋、輸入、條件語句)

    計(jì)算機(jī)中所有的數(shù)據(jù)本質(zhì)上都是用0和1的組合來存儲(chǔ)的。編碼就相當(dāng)于密碼本,在計(jì)算機(jī)中有多個(gè)密碼本:utf-8編碼、gbk編碼等 注意事項(xiàng):在計(jì)算機(jī)中若以某個(gè)編碼形式進(jìn)行保存文件,以后也要以這種編碼形式去打開這個(gè)文件,否則就會(huì)出現(xiàn)亂碼。 編碼必須要保持:保存和打

    2024年02月05日
    瀏覽(21)
  • js中如何判斷一個(gè)變量的數(shù)據(jù)類型?

    js中如何判斷一個(gè)變量的數(shù)據(jù)類型?

    前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個(gè)專欄是為那些對(duì)Web開發(fā)感興趣、剛剛踏入前端領(lǐng)域的朋友們量身打造的。無論你是完全的新手還是有一些基礎(chǔ)的開發(fā)者,這里都將為你提供一個(gè)系統(tǒng)而又親切的學(xué)習(xí)平臺(tái)。在這個(gè)

    2024年02月09日
    瀏覽(19)
  • 《人生苦短——我學(xué)Python》條件判斷->雙向選擇(if--else)

    《人生苦短——我學(xué)Python》條件判斷->雙向選擇(if--else)

    今天我們來學(xué)習(xí)雙向選擇判斷。顧名思義,雙向就是兩種選擇選其一,即 if----else 。如果If的條件不成立,則執(zhí)行 else 下的語句,否則執(zhí)行 if 下面的語句。顯然,它們是 互斥 的!下面就讓我們來詳細(xì)看看吧! if 后面的語句是當(dāng)判斷 條件成立 時(shí), 需要執(zhí)行 的操作。 else 后面

    2024年02月10日
    瀏覽(44)
  • C++ 條件與 If 語句:掌握邏輯判斷與流程控制精髓

    您已經(jīng)知道 C++ 支持?jǐn)?shù)學(xué)中的常見邏輯條件: 小于: a b 小于或等于: a = b 大于: a b 大于或等于: a = b 等于: a == b 不等于: a != b 您可以使用這些條件來針對(duì)不同的決定執(zhí)行不同的操作。 C++ 具有以下條件語句: 使用 if 來指定一個(gè)代碼塊,如果指定的條件為 true,則執(zhí)行該

    2024年04月08日
    瀏覽(34)
  • Windows 批處理(bat) if條件判斷語句使用教程

    Windows 批處理(bat) if條件判斷語句使用教程

    在bat腳本中,if條件判斷語句共有6種比較操作符,分別為 操作符(不區(qū)分大小寫) 描述 全稱 equ 等于 equal neq 不等于 no equal lss 小于 less than leq 小于等于 leq less than or equal gtr 大于 greater than geq 大于等于 geq greater than or equal 其中,只有等于操作符可以使用符號(hào) “==” 表示,其

    2024年02月03日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包