感觉学习语言的话,函数是个重头戏。来看一下Lua的函数是神马样纸的东东!
--一个简单的函数:阶乘 function factorial(num) if num == 0 then return 1 else return num * factorial(num - 1) end end恩,这就是个函数。function关键字,说明这是个函数,然后是函数名,后面跟的是参数列表,使用括号括起来。函数的结尾需要一个end关键字,表明函数结束了。
--一个简单的函数:阶乘 function factorial(num) if num == 0 then return 1 else return num * factorial(num - 1) end end --调用函数的例子:输入一个数字,求其阶乘 line = io.read() n = tonumber(line) if n == nil then print("input is not a valid num") else print(factorial(n)) end结果:
--函数后面只有一个参数,且为字符串 print "hello world" --函数后面只有一个参数,且为table构造式 print {x = 10, y = 20}结果:
function myprint(a, b, c) print(a, b, c) end --正常调用 myprint(1, 2, 3) --参数多了 myprint(1, 2, 3, 4) --参数不足 myprint(1, 2)结果:
--赶脚灰常牛的特性,多个返回值 --一个接受一个table的函数,返回最大元素以及该元素的位置 function maxinum(a) local index = 1 local max = a[index] for i, val in ipairs(a) do if val > max then max = val index = i end end return max, index end --测试 a = {1, 2, 3, 10, 4, 8, 5, 7} print(maxinum(a))结果:
--多重返回值demo function func() return 1, 2, 3 end --正常的多重赋值,按照顺序进行多重赋值,返回值个数多了的舍去,少了的取nil a , b, c = func() print(a, b, c) --若函数是多重赋值的最后一个或者唯一一个表达式,那么会尽可能的保留其返回值 a, b, c = 0, func() print(a, b, c) --若函数不是最后一个的话,则只产生一个返回值 a, b, c = func(), 0 print(a, b, c)结果:
--多重返回值demo function func() return 1, 2, 3 end --接受固定参数的myprint() function myprint(a, b, c) print(a, b, c) end --当仅有或者为最后一个形参时,会尽可能保留其返回值 print(func()) --myprint仅接受三个参数 myprint(0, func()) --函数表达式为不为最后一个时,仅保留一个返回值 print(func(), 1)结果:
--多重返回值demo function func() return 1, 2, 3 end --当有()括起函数时,即形成了一个表达式,不管函数返回几个值,仅取一个值 print((func()))结果:
--多重返回值demo function func() return 1, 2, 3 end --打印table中所有值的函数 function myprint(a) for i, v in ipairs(a) do print(v) end print("--------------------------------") end --当仅有一个或者是最后一个构造实参时 a = {func()} myprint(a) a = {0, func()} myprint(a) --当不是最后一个时,仅能返回一个值 a = {func(), 0} myprint(a)结果:
--多重返回值demo function func() return 1, 2, 3 end --return多个结果 function func2() return 1,func() end function func3() return func(),1 end --func2调用func1,func1在最后会返回1,2,3 print(func2()) --func3调用func1,func1不在最后,仅返回1 print(func3())
--变长参数 --...表示变长参数,使用for循环遍历其中的内容 function add(...) local sum = 0 for i, v in ipairs{...} do sum = sum + v end return sum end --使用函数 print(add(1, 2, 3, 4, 5))结果:
--变长参数 --func function func(...) --直接打印这些参数 print(...) --赋值(多了的舍去,少了的nil) a, b = ... print("a, b = ", a, b) --使用(...)表示只取得第一个 return (...) end print(func(1,2,3))结果:
--关于可变参数的另一种遍历方式 function func(...) for i = 1, select('#', ...) do local arg = select(i, ...) print(arg) end end func(1, 2, 3, 4)结果:
--参数使用一个table的构造式,根据其中不同的字段获取其值 function Window(option) --这里将参数的各个字段打印一遍 print(option.x or 0)--后面的为默认值,如果option.x为nil,则使用默认值 print(option.y or 0) print(option.width or 800) print(option.height or 600) print("-------------------------------------------") end --当参数只有一个table的构造式时,可以省略括号 Window{x = 100, y = 200, width = 1000, height = 800} --当有参数没给出时,会使用默认参数 Window{x = 100} --顺序不一样也是可以的哈 Window{y = 100, width = 1000, x = 100, height = 800}结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/puppet_master/article/details/47955819