Lua建議的命名規則
常量用全大寫和下劃線,如:MY_CONSTANT;
變量第一個字母小寫,如:myVariable;
全局變量第一個字母用小寫g表示,如gMyGlobal;
函數名第一個字母大寫如: function MyFunction()
Lua變量
Lua變量命名的方式是直接寫,如:
myValue = 7
local value = 8
Lua變量默認是全局的,若要使用局部的變量,則在前面加local關鍵字
Lua變量不需要在使用前聲明,但是這就導致很多變量無法追蹤,所以要避免寫出難以追蹤的變量
Lua控制結構
在Lua中,任何控制結構都會以end作為結束, 如:
// 判斷
if 條件 then
執行事件
else
執行事件
end
// while循環
while 條件 do
...........................
...........................
end
Lua函數
函數的命名方式為
function 函數名(參數1,參數2............)
函數內容
return 返回值 // 返回值可有可無,根據自己的需要而定
end
Lua的函數還有一個強大的功能,就是可以用(...)來代替參數列表,定義不定長的參數列表, 如:
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也可以返回多個返回值,中間用逗號隔開,還可以返回函數
Lua對數的操作
一下都是標準庫中的東西
1.Lua的隨機數
math.random()可以傳入最大值和最小值來生成范圍內的隨機數,如:要生成1到10 的一個隨機數,應該這樣寫:
math.random(1, 10)
2.Lua的最大最小
math.max() 和 math.min(),他們可以接受若干數字類型的參數,來返回其中的最大值或者最小值。
在Lua中,由于大部分數據都存在于Table中,所以使用函數處理起來會有一些挑戰,因為你需要把Table中的所有數據都加到函數中。不過還好, 我們可以創建字符串然后利用loading函數來解決這個問題,參考下面的示例:
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()函數,將字符串強制轉換為數字
tostring()函數,把數字轉換成字符
string.char(n1, n2, ...)函數根據ASCII編碼返回傳入參數對應的字符。這個函數不是很常用,但在Lua游戲保存文件中插入一個換行符的時候非常有用,它可以讓文件更便于閱讀。例如:
myFile: write(string,char(10)) --writes out a linefeed to the open
file
string.len(myString)函數,用來返回傳入字符串的長度
string.sub(myString, start, end)函數返回位于start開始到end結束的指定的字符串
string.format()格式化輸出指定字符串
string.find(sourceString, findString)函數,在sourceString查找第一個符合findString字符的位置,如果找到了改目標字符則返回它的開始和結束位置,如果沒有則返回nil。
string.gsub(sourceString, pattern, replacementString)函數,把sourceString中符合pattern的字符串全部替換為replacementString并且返回新的字符串
string.gfind(sourceString, pattern)函數,遍歷一個自字符串,一旦找到符合指定格式的子字符串就返回該子串
Lua的table數據結構
table.getn(myTable)函數, 返回table中元素的個數
table.insert(myTalbe, position, value)函數, 在table中插入一個新的值,位置參數是可選的,如果沒設定,會添加新的值到table末尾,如果指定了該值,則插入到指定的位置
table.remove(myTable, position)函數, 從指定的table中刪除并返回一個元素,必要時重新索引table。如果沒有指定position的值,則默認刪除table的最后一個元素
table的引用
table不僅能使用數字索引,還可以使用其他的值作為索引值。參考下面的示例:
myData = {}
myData.name = "Thardwick"
myData.class = "Barbarian"
myData.str = math.random(3, 18)
myData.dex = math.random(3, 18)
在這個例子中,我們使用名字作為索引值,它們可以作為獲取table中值得關鍵字。該table同樣還能使用數字索引,我們還能添加下面的數據:
myData[1] = 17
myData[2] = 34
myData[3] = 24
這個方法給了我們很大的靈活性,讓table不僅保存了很多屬性值,還可以保存數組, 并通過索引來訪問。
多維的table
在Lua中創建多維的table非常容易。就是table中的table,即一個table元素又是一個table,和多維數組是一個道理,參考下面的示例:
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()函數來遍歷table中的每一個元素,示例如下:
myNames = {"Fred", "Ethel", "Lucy", "Ricky", "Rockey", "Besty", "Bill" }
for index, value in pairs(myNames) do
print(index, value)
end