函数
function类型:函数类型(作为第一类值)
定义的语法:
function sum(a,b)
return a+b
end
local function sum(a,b)
return a+b
end
local sum = function(a,b)
return a+b
end
函数的特性:
支持多返回值,返回值用,隔开
local getMaxValueAndIndex = function(array)
if type(array) ~= "table" then
error("参数必须为table类型")
end
max = array[1]
index = 1
for i = 2,#array do
if max < array[i] then
max = array[i]
index = i
end
end
return max,index
end
local tb = {1, 5, 7, 4, 10 ,9 ,6}
local a = getMaxValueAndIndex(tb)
local _,a = getMaxValueAndIndex(tb)
print(getMaxValueAndIndex(tb))
当参数为table类型时,实参可以省略()
print(getMaxValueAndIndex{1, 3, 5, 7, 9})
Lua没有参数缺省,可以采取表达式
function test(a,b)
a = a or 0
b = b or ""
end
可以不定个数的参数,用 ... 表示
function printTest( ... )
local args = { ... }
print( ... )
for i = 1,#args do
print(args[i])
end
end
printTest(1, 2, 3)
table中的函数
冒号与点的区别:冒号的第一个参数默认为self,self指向调用该函数
local vec2 = {x = 1, y = 2}
function vec2:getLength()
return math.sqrt(self.x ^ 2 + self.y ^ 2)
end
print(vec2:getLength())
print(vec2.getLength(vec2))
local size = {w = 1, h = 3}
function size:getArea()
return self.w * self.h
end
function size:getPerimeter()
return (self.w + self.h) * 2
end
print("size的面积为: " .. size:getArea())
print("size的周长为: " .. size:getPerimeter())
print("-------------------")
string的函数
for k,v in pairs(string) do
print(k)
end
string.find():在母串中查找子串出现的起始位置和结束位置
print(string.find("hello hello", "hel"))
print(string.find("hello hello", "hel", 2))
string.sub():字符串截取
print(string.sub("abcdefg",2,-2))