Lua&ios dev
-
Upload
emptyhua -
Category
Technology
-
view
2.543 -
download
6
description
Transcript of Lua&ios dev
Lua & IOS dev
why script?
应付需要及时变更的逻辑
各种引擎的得力助手
绕过 app sotre 更新软件
why lua?
JavascriptCore (private Api)
statically compile:javascriptCore 6M ✖lua 200K ✔
优点 :内存占用小,速度快线程独立语言本身易懂
缺点 :语言本身自带的功能太少 , 没有 unicode 字符串支持,没有位运算 ..
lua in xxxxxx client
Lua 是一门轻量级的嵌入式语言。目前在游戏开发中被大量应用。
本身自带了很少的基本库,并且也是可以选择加载的
luaopen_base(L);luaopen_string(_L);luaopen_math(_L);luaopen_table(_L);
Hello Luacat hello.c#include "lua.h"#include "lauxlib.h"
int main (int argc, const char * argv[]){ lua_State *L; L = lua_open();// 创建 lua 运行环境 luaopen_base(L);// 加载基本库 luaL_loadstring(L, “print(‘hello lua’)”); // 加载一段 lua 代码 lua_pcall(L, 0, LUA_MULTRET, 0);// 运行 lua_close(L);// 释放 return 0;}
源代码,有 gcc 即可编译:http://bluehua.org/demo/hello_lua.zip
sample codefunction short_url(url) local _,s_pos,e_pos local json = wget("http://xx.xx/s/shorten.json?url=" .. url) print(json) _,s_pos = string.find(json, "\"shortenUrl\":\"") e_pos,_ = string.find(json, "\",\"errorCode") if not s_pos or not e_pos then print("can't find short") return "" end return string.sub(json, s_pos+1, e_pos-1) end
Lua 5.1 参考手册
扩展 lua//typedef int (*lua_CFunction) (lua_State *L);// 扩展一个解析 url encode 的方法static int lua_unescape(lua_State *L) { const char *str_raw = luaL_checkstring(L, 1);// 从栈里取出参数 NSString *str = [[NSString alloc]initWithUTF8String:str_raw]; NSString *dstr = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; lua_pushstring(L, [dstr UTF8String]);// 将结果压栈 [str release]; return 1;// 返回函数结果的数目}
//lua 这种简单的 api 设计使得函数支持多参和返回多个结果
// 注册自己扩展的 c 函数lua_register(L, "unescape", lua_unescape);
从 lua 里取值
- (NSString *)getStringGlobal:(NSString *)name { lua_getglobal(_L, [name UTF8String]);// 获取一个全局变量,压栈 NSString *rt = nil; if (lua_isstring(_L, -1)) { const char *raw_str = lua_tostring(_L, -1);// 读取字符串 rt = [NSString stringWithUTF8String:raw_str]; } lua_pop(_L, 1);// 从栈上移除 return rt;}
end