写lua时需要注意的地方
Lua 從一個(gè)對(duì)象?obj?中獲取一個(gè)元方法的過(guò)程:
rawget(getmetatable(obj) or {}, "__" .. event_name)取長(zhǎng)度操作符寫(xiě)作一元前置符?#。 字符串的長(zhǎng)度是它的字節(jié)數(shù)(就是以一個(gè)字符一個(gè)字節(jié)計(jì)算的字符串長(zhǎng)度)。
程序可以通過(guò)?__len?元方法來(lái)修改對(duì)字符串類(lèi)型外的任何值的取長(zhǎng)度操作行為。
如果?__len?元方法沒(méi)有給出, 表?t?的長(zhǎng)度只在表是一個(gè)?序列?時(shí)有定義。 序列指表的正數(shù)鍵集等于?{1..n}?, 其中?n?是一個(gè)非負(fù)整數(shù)。 在這種情況下,n?是表的長(zhǎng)度。 注意這樣的表
{10, 20, nil, 40}不是一個(gè)序列,因?yàn)樗墟I?4?卻沒(méi)有鍵?3。 (因此,該表的正整數(shù)鍵集不等于?{1..n}?集合,故而就不存在?n。) 注意,一張表是否是一個(gè)序列和它的非數(shù)字鍵無(wú)關(guān)。
return?functioncall?這樣的調(diào)用形式將觸發(fā)一次?尾調(diào)用。 Lua 實(shí)現(xiàn)了?完全尾調(diào)用(或稱(chēng)為?完全尾遞歸): 在尾調(diào)用中, 被調(diào)用的函數(shù)重用調(diào)用它的函數(shù)的堆棧項(xiàng)。 因此,對(duì)于程序執(zhí)行的嵌套尾調(diào)用的層數(shù)是沒(méi)有限制的。 然而,尾調(diào)用將刪除調(diào)用它的函數(shù)的任何調(diào)試信息。 注意,尾調(diào)用只發(fā)生在特定的語(yǔ)法下, 僅當(dāng)?return?只有單一函數(shù)調(diào)用作為參數(shù)時(shí)才發(fā)生尾調(diào)用; 這種語(yǔ)法使得調(diào)用函數(shù)的所有結(jié)果可以完整地返回。 因此,下面這些例子都不是尾調(diào)用:
return (f(x)) -- 返回值被調(diào)整為一個(gè)return 2 * f(x)return x, f(x) -- 追加若干返回值f(x); return -- 返回值全部被舍棄return x or f(x) -- 返回值被調(diào)整為一個(gè)?
Lua 語(yǔ)言有詞法作用范圍。 變量的作用范圍開(kāi)始于聲明它們之后的第一個(gè)語(yǔ)句段, 結(jié)束于包含這個(gè)聲明的最內(nèi)層語(yǔ)句塊的最后一個(gè)非空語(yǔ)句。 看下面這些例子:
x = 10 -- 全局變量do -- 新的語(yǔ)句塊local x = x -- 新的一個(gè) 'x', 它的值現(xiàn)在是 10print(x) --> 10x = x+1do -- 另一個(gè)語(yǔ)句塊local x = x+1 -- 又一個(gè) 'x'print(x) --> 12endprint(x) --> 11endprint(x) --> 10 (取到的是全局的那一個(gè))注意這里,類(lèi)似?local x = x?這樣的聲明, 新的?x?正在被聲明,但是還沒(méi)有進(jìn)入它的作用范圍, 所以第二個(gè)?x?指向的是外面一層的變量。
轉(zhuǎn)載于:https://www.cnblogs.com/andyidea/p/4515531.html
總結(jié)
以上是生活随笔為你收集整理的写lua时需要注意的地方的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SharePoint 2013 work
- 下一篇: 2015年 六·一 儿童节——我