前言
Lua 是一种轻量小巧的脚本语言,用标准C语言编写,并开源。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 是巴西里约热内卢天主教大学里的一个研究小组(由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成)于1993年开发。
- 只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
- lua 发起的Content-Type 为application/json; charset=UTF-8的请求
- 提供多线程(协同进程,并非操作系统所支持的线程)支持;(协同进程 内部发起http请求的时候回导致设备卡死)
http://www.handjingling.com/e…
https://www.zybuluo.com/minik…
http://www.runoob.com/lua/lua…
多行注释推荐使用 --[=[注释内容]=]
经典问题
生产者-消费者问题
现在我就使用Lua的协同程序来完成生产者-消费者这一经典问题。
local newProductor
function productor()
local i = 0
while true do
i = i + 1
send(i) -- 将生产的物品发送给消费者
end
end
function consumer()
while true do
local i = receive() -- 从生产者那里得到物品
print(i)
end
end
function receive()
local status, value = coroutine.resume(newProductor)
return value
end
function 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/hosts
iPhone:/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