关闭

lua学习(四)

4020人阅读 评论(0) 收藏 举报

    这几天开了个小差, 把lua的很多扩展库都用了一下, luasocket, luasql, luacom, kepler... 最后终于理解了require的作用了.  其实也就是pil提及到的搜索加载目录那么简单,当然有一个经验就是定义LUA_PATH与package.cpath的值,就像定义include和lib的路径一样, 可以方便地导入到lua环境 :)
    本来打算用luasql的odbc库来做数据库访问的开发, 执行sql语句, 游标以及事务都成功了, 唯独执行带参数的存储过程不知道怎么搞,  这可郁闷了我很久. 由于对odbc不熟, 就查了下msdn文档, 后面看看luasql的源码发现于根本没有支持存储过程的参数. 看来要么就要自己在luasql的基础上扩展下,要么就要放弃它了. 手头上的事很多, 先放放,搞清楚一下odbc再说. 
 现在又回到了pil专注lua的语法了. table真的很cool,可以轻松实现稀疏矩阵, 串, 队列(单双向), 栈,集合以及各种其它的数据结构, 而且非常好用.  metatables和metamethods确实很酷, 利用这些东西可以实现运算符重载(看上去像), 继承(单/多),封装, getter/setter等等. 暂时还没有看到类的那一章. 有了前面的内容,怎么用__index定义原型链构造一个类的继承体系, 加上package, 应该八九不离十了,先意淫一把.
 忘了补充一下, 5.1  c api 中的 luaopen_*现在和lua调用其它普通c函数的过程一样:
lua_pushcfunction(L, luaopen_*);
lua_call();
也可以用
lua_cpcall(L, luaopen_*, 0); 简化上面两步的操作, 实际了看lua_cpcall的源码就知道,是一样的
那么现在5.1推荐的开始调用lua的写法是这样的: 
 lua_State *L = luaL_newstate();
 
 lua_cpcall(L, luaopen_base, 0);
 lua_cpcall(L, luaopen_io, 0);
 lua_cpcall(L, luaopen_string, 0);
 // ...
 // ...

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:215901次
    • 积分:3158
    • 等级:
    • 排名:第10844名
    • 原创:69篇
    • 转载:9篇
    • 译文:1篇
    • 评论:236条
    最新评论
    软件工程/UML/设计模式