(((深入学习lua 1 )))
1.函数 function name(arg1, arg2) .... end
2.function name(...)
lua会创建一个局部名字为arg的table类型数组
例如:
function HowMany(...) --> or (var1, var2, ...)
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 variable entered");
end
end
***注意了,这里的arg下标是从1开始的。arg.n代表size
不仅函数可以有多个参数,也可以有多个返回值
如下:
function double(a)
return a = a*2
end
function ThreeDice()
d1 = math.random(1,6)
d2 = 3
d3 = d1 + d2
return d1, d2, d3
end
如何接收呢?
a = {MyFun()}
a,b = MyFun()
x,a,b = 1, MyFun()
//这个网站不错:http://book.luaer.cn/
3.函数特性:return去调用另一个函数。
函数尾调用不会导致堆栈溢出,类似于goto作用。 book.luaer.cn
===
标准库:
1.assert(myValue)()
myString = "math.max(7,8,9,10)"
2.loadstring(myString)()
3.dofile(filename),这个还可以载入数据文件
RunGUI():执行用户界面的函数
RunScrpt()
这两个函数和dofile比较类似,不过他们还可以执行已经编译好的二进制的lua文件
4.数学运算函数:
这些函数式调用c标准库的数学运算函数,大部分是LuaGlue接口,
他们调用了C标准库。这些函数实际上存在一个叫"math"的表中,
你可以如下来调用:
math.abs
math.max
math.min
math.pow
math.floor a = math.random(1, 6)
初始随机种子:math.randomseed(os.date(%d%H%M%S))
为了调试,可能需要把这个随机数种子设定为整数,这样就
可以保证每次运行游戏时都能得到相同的数值。
5.字符处理
字符转数字:tonumber()
数字转字符:tostring()
根据ASCII编码返回对应的字符string.char()
string.char(n1, n2, ...) -> myFile:write(string.char(10)) 插入一个换行符非常方便
string.len(myString)--》strlen()
string.sub(string, start, end) 可以填-2表示倒数第二个位置
string.format("%s%s", str1, str2) %d %f
string.find(srcStr, findStr)
***字符替换
string.gsub(srcStr, pattern , replaceStr)
例如:
myString = "my name is john, phone is 555-66"
newstring = string.gsub(myString, "%d", "*")
print(newString) --> my name is john,phnoe is ***-**
//满足%d格式的东东都那个了
***字符查找
string.gfind(srcstr, pattern)
例子:
myString = "this is my rather long string"
counter =1
for myWord in string.gfind(myString, "%a+") do
print(string.format("Word #%d:%s", counter, myWord))
counter = counter +1
end
--%a+匹配独立的单词,在解析游戏数据时非常有用的。
六:table数据结构
table.getn(myTable) 返回元素个数
table.sort(myTable)
table.insert(myTable, position, value)
插入新值,位置是可选的,如果没选则默认插入到末尾
table.remove(myTable, position)
2.table引用
myData = {}
myData.name = "hehe"
myData.class = "bird"
myData.str = math.random(3,18)
3.多维table,table中的table:使用多维table保存和载入游戏进度
duoweiTable ={}
duoweiTable.name = {}
duoweiTable.cost = {}
duoweiTable.name[1] = "hehe"
duoweiTable.name[2] = "kaokao"
duoweiTable.cost[1] = "no"
duoweiTable.cost[2] = "yes"
4.pairs()可以遍历table中的每一个元素
myNames = {"tony", "anny", "simon", "lucy", "bill"}
for index, value in pairs(myNames) do
print(index, value)
end
例子二:pairs函数在遍历非数字索引的table时非常有用。
myData = {}
myData.name = "Billy"
myData.interest = "Wind surfing"
myData.quote = "Colud out , eh?"
for index, value in pairs(myData) do
print(index, value)
end
一.I/O基础
io.open(),
myFile = ioopen("test.lua", 'w')打开失败返回nil
例子:
myFile = io.open("t.lua", 'w')
if myFile ~= nil then
myFile:write("-- Test lua file")
myFile:write(string.char(10))
myFile:write(string.format("%s%s", "-- File created on", os.date()))
io.close(myFile)
end
在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。