lua函数的学习
来源:互联网 发布:淘宝只装无线瑞 编辑:程序博客网 时间:2024/05/27 00:42
lua 语言包含下面一些基本类型nil,boolean,number,string,function,table,thread ,userdata
其中函数使用起来比较灵活,参数传递和结果返回都很方便,闭包的特性又让它非常类似js的编程特点,我就在下面展示一些函数的基本使用。
A,函数返回多个结果(多余的返回值被discard掉)
function jisuan(a, b)return a+b,a-bendlocal a,b = jisuan(5,4)print(a,b)B,传递可变参数,通过遍历arg变量获取
function say(a, b, ...)print(a,b)for i,v in ipairs(arg) doprint(v)endendsay("I","have","so","many","work","to","do")C,使用闭包函数实现自定义排序
local tbl = {}tbl[1] = {name="ciaos", age=23}tbl[2] = {name="penjin", age=24}tbl[3] = {name="littley", age=22}table.sort(tbl,function(a,b)return a.age < b.ageend)for i,v in ipairs(tbl) doprint(v.name,v.age)endD,非全局递归函数需要先声明
local factfact = function (n)if n == 0 thenreturn 1elsereturn n*fact(n-1) -- buggyendendprint(fact(4))E,正确的尾递归,避免栈溢出
--正确的尾调用return another_func(x)--错误的尾调用,栈溢出return another_func(x) + 1return x or g(x)
F,下面用协程函数实现一个简单的生产者-消费者程序,键盘输入充当生产者,consumer函数获取键盘输入
function producer() -- 生产者协程函数return coroutine.create(function()-- 产生消息暂停生产活动while true dolocal msg = io.read()-- 暂停这个协程函数的运行coroutine.yield(msg)endend)endfunction consumer(prod)-- 轮询等待消息while true do-- 恢复运行producer函数获取结果,resume-yield可以相互交换数据。local status, msg = coroutine.resume(prod)print("get " .. msg)endend-- 将producer函数作为参数传入consumer(producer())
G,三个协程函数共同操作数据
-- 操作者Aco1 = coroutine.create(function(idx) -- 满足条件while idx < 10 do -- 操作数据print("co1: " .. idx)idx = idx + 1-- 让出cpu给操作者B,并获取结果idxstatus,thread,idx = coroutine.resume(co2,idx)endend)-- 操作者Bco2 = coroutine.create(function(idx) -- 满足条件while idx < 10 do -- 操作数据print("co2: " .. idx)idx = idx + 1-- 让出cpu给操作者C,并获取C的结果,然后挂起自身,让出CPU回给Astatus,thread,idx = coroutine.resume(co3,idx)idx = coroutine.yield(co2,idx)endend)-- 操作者Cco3 = coroutine.create(function(idx) -- 满足条件while idx < 10 do -- 操作数据print("co3: " .. idx)idx = idx + 1-- 挂起操作者C,并传回idx给操作者B,并获取下一次操作者B唤起C的idx值idx = coroutine.yield(co3,idx)endend)-- 唤起操作者Acoroutine.resume(co1,1)
输出结果如下:
>lua -e "io.stdout:setvbuf 'no'" "test.lua" co1: 1co2: 2co3: 3co1: 4co2: 5co3: 6co1: 7co2: 8co3: 9>Exit code: 0
- lua函数的学习
- Lua学习之Lua的函数解析(待补充)
- 【学习Lua】函数的多重返回值
- Lua基础 函数学习
- Lua学习笔记函数
- Lua 函数 学习
- Lua函数学习
- Lua学习之函数
- [LUA学习笔记03]LUA函数和C函数的相互调用
- lua脚本语言的学习-----------------带参数的lua函数的传递
- lua学习笔记3(lua中的文件相关的函数的应用)
- lua脚本语言的学习-----------------如何实现c++无参数的函数在lua中调用
- 通过例子学习Lua(4) -- 函数的调用 (转)
- 通过例子学习Lua(4)--函数的调用
- 通过例子学习Lua(4) -- 函数的调用
- Lua学习教程之 spilt函数的实现
- 【Lua学习笔记】 --> 《字符串string与table的函数操作》
- Lua string函数学习笔记
- iOS ARC环境下dealloc的使用
- PHPExcel使用的常用说明以及把PHPExcel整合进CI框架
- 程序员应具备的东西
- oracle中的SGA和PGA
- 6.16开发者日:微云张礼镜讲述韩国推广渠道
- lua函数的学习
- 1018
- uva 10177 - (2/3/4)-D Sqr/Rects/Cubes/Boxes?
- 带壳破解SMC补丁技术
- v$sql、v$sqlarea、v$sqltext、v$sql_plan的联系与区别
- MFMessageComposeViewController中文界面设定
- 黑马程序员-单例设计模式:懒汉式和饿汉式
- 归并排序(递归实现+非递归实现+自然合并排序)
- VB write#语句和print#语句