Lua建議的命名規(guī)則
常量用全大寫和下劃線孝偎,如:MY_CONSTANT;
變量第一個(gè)字母小寫,如:myVariable;
全局變量第一個(gè)字母用小寫g表示,如gMyGlobal;
函數(shù)名第一個(gè)字母大寫如: function MyFunction()
Lua變量
Lua變量命名的方式是直接寫涕刚,如:
myValue = 7
local value = 8
Lua變量默認(rèn)是全局的,若要使用局部的變量乙帮,則在前面加local關(guān)鍵字
Lua變量不需要在使用前聲明杜漠,但是這就導(dǎo)致很多變量無(wú)法追蹤,所以要避免寫出難以追蹤的變量
Lua控制結(jié)構(gòu)
在Lua中察净,任何控制結(jié)構(gòu)都會(huì)以end作為結(jié)束驾茴, 如:
// 判斷
if 條件 then
執(zhí)行事件
else
執(zhí)行事件
end
// while循環(huán)
while 條件 do
...........................
...........................
end
Lua函數(shù)
函數(shù)的命名方式為
function 函數(shù)名(參數(shù)1,參數(shù)2............)
函數(shù)內(nèi)容
return 返回值 // 返回值可有可無(wú)氢卡,根據(jù)自己的需要而定
end
Lua的函數(shù)還有一個(gè)強(qiáng)大的功能沟涨,就是可以用(...)來(lái)代替參數(shù)列表,定義不定長(zhǎng)的參數(shù)列表, 如:
function HowMany(...)
if arg.n > 0 then
for indx = 1, arg.n do
local myString = string.format("%s%d", "Argument", indx, ":")
print(myString, arg[indx]}
end
else
print("No variables entered.")
end
end
return也可以返回多個(gè)返回值异吻,中間用逗號(hào)隔開,還可以返回函數(shù)
Lua對(duì)數(shù)的操作
一下都是標(biāo)準(zhǔn)庫(kù)中的東西
1.Lua的隨機(jī)數(shù)
math.random()可以傳入最大值和最小值來(lái)生成范圍內(nèi)的隨機(jī)數(shù),如:要生成1到10 的一個(gè)隨機(jī)數(shù)诀浪,應(yīng)該這樣寫:
math.random(1, 10)
2.Lua的最大最小
math.max() 和 math.min(),他們可以接受若干數(shù)字類型的參數(shù)棋返,來(lái)返回其中的最大值或者最小值。
在Lua中雷猪,由于大部分?jǐn)?shù)據(jù)都存在于Table中睛竣,所以使用函數(shù)處理起來(lái)會(huì)有一些挑戰(zhàn),因?yàn)槟阈枰裈able中的所有數(shù)據(jù)都加到函數(shù)中求摇。不過還好射沟, 我們可以創(chuàng)建字符串然后利用loading函數(shù)來(lái)解決這個(gè)問題,參考下面的示例:
function GetMin(theTable)
myString = 'myValue = math.min('for index, value in ipairs(theTable) do
myString = string.format("%s%d%s", myString, value, ",")
end
--remove final comma
myString = string.sub(myString, 1, string.len(myString) - 1)
--add final
myString = string.format("%s%s", myString, ')')
-- run the chunk
loadstring(myString)()
returen myValue
end
Lua字符串的操作
tonumber()函數(shù)与境,將字符串強(qiáng)制轉(zhuǎn)換為數(shù)字
tostring()函數(shù)验夯,把數(shù)字轉(zhuǎn)換成字符
string.char(n1, n2, ...)函數(shù)根據(jù)ASCII編碼返回傳入?yún)?shù)對(duì)應(yīng)的字符。這個(gè)函數(shù)不是很常用摔刁,但在Lua游戲保存文件中插入一個(gè)換行符的時(shí)候非常有用挥转,它可以讓文件更便于閱讀。例如:
myFile: write(string,char(10)) --writes out a linefeed to the open
file
string.len(myString)函數(shù)共屈,用來(lái)返回傳入字符串的長(zhǎng)度
string.sub(myString, start, end)函數(shù)返回位于start開始到end結(jié)束的指定的字符串
string.format()格式化輸出指定字符串
string.find(sourceString, findString)函數(shù)绑谣,在sourceString查找第一個(gè)符合findString字符的位置,如果找到了改目標(biāo)字符則返回它的開始和結(jié)束位置拗引,如果沒有則返回nil借宵。
string.gsub(sourceString, pattern, replacementString)函數(shù),把sourceString中符合pattern的字符串全部替換為replacementString并且返回新的字符串
string.gfind(sourceString, pattern)函數(shù)矾削,遍歷一個(gè)自字符串壤玫,一旦找到符合指定格式的子字符串就返回該子串
Lua的table數(shù)據(jù)結(jié)構(gòu)
table.getn(myTable)函數(shù), 返回table中元素的個(gè)數(shù)
table.insert(myTalbe, position, value)函數(shù)怔软, 在table中插入一個(gè)新的值垦细,位置參數(shù)是可選的,如果沒設(shè)定挡逼,會(huì)添加新的值到table末尾括改,如果指定了該值,則插入到指定的位置
table.remove(myTable, position)函數(shù)家坎, 從指定的table中刪除并返回一個(gè)元素嘱能,必要時(shí)重新索引table。如果沒有指定position的值虱疏,則默認(rèn)刪除table的最后一個(gè)元素
table的引用
table不僅能使用數(shù)字索引惹骂,還可以使用其他的值作為索引值。參考下面的示例:
myData = {}
myData.name = "Thardwick"
myData.class = "Barbarian"
myData.str = math.random(3, 18)
myData.dex = math.random(3, 18)
在這個(gè)例子中做瞪,我們使用名字作為索引值对粪,它們可以作為獲取table中值得關(guān)鍵字右冻。該table同樣還能使用數(shù)字索引,我們還能添加下面的數(shù)據(jù):
myData[1] = 17
myData[2] = 34
myData[3] = 24
這個(gè)方法給了我們很大的靈活性著拭,讓table不僅保存了很多屬性值纱扭,還可以保存數(shù)組, 并通過索引來(lái)訪問儡遮。
多維的table
在Lua中創(chuàng)建多維的table非常容易乳蛾。就是table中的table,即一個(gè)table元素又是一個(gè)table鄙币,和多維數(shù)組是一個(gè)道理肃叶,參考下面的示例:
widget = {}
widget.name = {}
widget.cost = {}
widget.name[1] = "Can opener"
widget.cost[1] = "$12.75"
widget.name[2] = "Scissors"
widget.cost[2] = "$8.99"
使用pairs()函數(shù)來(lái)遍歷table中的每一個(gè)元素,示例如下:
myNames = {"Fred", "Ethel", "Lucy", "Ricky", "Rockey", "Besty", "Bill" }
for index, value in pairs(myNames) do
print(index, value)
end