前言
Lua 是一种轻量小巧的脚本语言,用标准C语言编写,并开源。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 是巴西里约热内卢天主教大学里的一个研究小组(由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成)于1993年开发。
- 只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
- 提供多线程(协同进程,并非操作系统所支持的线程)支持;(协同进程 内部发起http请求的时候回导致设备卡死)
多行注释推荐使用 --[=[注释内容]=]
经典问题
生产者-消费者问题现在我就使用Lua的协同程序来完成生产者-消费者这一经典问题。local newProductorfunction productor() local i = 0 while true do i = i + 1 send(i) -- 将生产的物品发送给消费者 endendfunction consumer() while true do local i = receive() -- 从生产者那里得到物品 print(i) endendfunction receive() local status, value = coroutine.resume(newProductor) return valueendfunction send(x) coroutine.yield(x) -- x表示需要发送的值,值返回以后,就挂起该协同程序end-- 启动程序newProductor = coroutine.create(productor)consumer()
适用于 执行一个任务(生产),上报数据给服务端(消费),开启下一个任务的场景。
生产一次,消费一次。
获取点坐标以及对应的颜色
x,y = catchTouchPoint(); sysLog("catchTouchPoint"..x..","..y); r,g,b = getColorRGB(x,y); sysLog("getColor:"..r..","..g..","..b);
lua 请求不走wifi 的代理,, 只能设置设备的hosts
iPhone:/etc root# echo "192.168.2.254 alimama.fuge.cn" > /etc/hostsiPhone:/etc root# echo '127.0.0.1 localhost' >> /etc/hosts
KNHttp 的用法示例
local postTable = {}; --测试网站 local res,code,response_body = httpPostJson(urlTable["getNew"], postTable); --notifyMessage("res is:"..res); sysLog("response_body "..table.concat(response_body)); sysLog(res) sysLog("Response body:") if type(response_body) == "table" then sysLog(table.concat(response_body)) else sysLog("Not a table:", type(response_body)) end --send("timeout") -- 将生产的物品发送给消费者,告诉后台转换超时 send(table.concat(response_body)) -- 将生产的物品发送给消费者 writePasteboard(code);
Dec 1 16:43:16 iPhone Music3f0[597] <Warning>: coroutine.status :dead
协同程序发起请求之后,立马dead
response_body[1]
decode3 = json.decode( response_body[1] )--第一个元素是string
从打印信息就可以看出
if type(response_body) == "table" then for k, v in pairs(response_body) do print( v) print( type(v)) str2 = v end end
遍历打印table的两种方式
if type(response_body) == "table" then for k, v in pairs(response_body) do -- print( v) -- print( type(v)) str2 = v end end
if type(response_body) == "table" then sysLog("《"..table.concat(response_body).."》") else sysLog("Not a table:", type(response_body)) end