手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:lua

LUA学习目录

其實關於LUA國內真的書籍很少,可見的好象也就那麼一本LUA手冊。這應該算是最常見的了。所以看到这里有一篇比较详细的合集,还是愿意和大家一起分享一下。当然也是我COPY来的。
之所以要提LUA,好象他被大家认可的应该算是两个游戏:WOW和愤怒的小鸟。好象现在有两种方式是最流行,一种是用LUA写脚本,一种是用LUA写跨平台程序。当然C写的程序也能跨平台。。不过LUA更方便一点
恩,现在很多程序开始支持LUA了。比如说NGINX,REDIS等都支持用lua来写扩展。这是多么让人兴奋的一件事。。。

不说废话,直接上内容了,原文来自:http://www.cnblogs.com/stephen-liu74/archive/2012/07/30/2487201.html

    之前已经说了很多,我目前的观点还是那样,在嵌入式脚本中,Lua是最优秀、最高效的,如果您有不同的观点,欢迎指正并讨论,切勿吐槽。这个系列完全来自 于《Programming in Lua》,您可以将其视为本人的读书笔记。相比而言,如果您已经掌握了Lua,但仍然不是非常熟练,请相信这个系列一定会给您的查阅以及知识点回顾带来一 定程度上的方便,至少我是这样的。然而对于Lua的初学者,还是建议直接看《Programming in Lua》。最近正在做一个项目的架构设计,打算使用Lua作为插件和框架之间的粘合剂,以及硬件协议的自描述脚本,从而可以动态扩展平台可以支持的硬件设 备。好了,不说太多了,还是看看下面的目录吧。
    
Step By Step(Lua开篇)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/17/2403210.html
一、简介
二、主要优势
三、应用场景

Step By Step(Lua基础知识)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/20/2407507.html
一、基础知识
二、类型与值

Step By Step(Lua表达式和语句)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/21/2409324.html
一、表达式
二、语句

Step By Step(Lua函数)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/21/2410300.html
一、函数
二、深入函数

Step By Step(Lua迭代器和泛型for)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/23/2413799.html

Step By Step(Lua编译执行与错误)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/23/2414417.html
一、编译
二、C代码
三、错误
四、错误处理与异常
五、错误消息与追溯

Step By Step(Lua数据结构)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/2417894.html

Step By Step(Lua数据持久化)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/26/2418572.html

Step By Step(Lua元表与元方法)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/27/2419435.html
一、算术类的元方法
二、关系类的元方法
三、库定义的元方法
四、table访问的元方法

Step By Step(Lua环境)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/28/2420931.html
一、全局变量声明
二、非全局的环境(函数变量)

Step By Step(Lua模块与包)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/28/2421283.html

Step By Step(Lua面向对象)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/28/2421656.html
一、类
二、继承
三、私密性

Step By Step(Lua弱引用table)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/29/2423565.html

Step By Step(Lua字符串库)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/30/2425233.html
一、基础字符串函数
二、模式匹配函数
三、模式
四、捕获(capture)
五、替换

Step By Step(Lua输入输出库)
http://www.cnblogs.com/stephen-liu74/archive/2012/03/30/2426131.html
一、简单模型
二、完整I/O模型

Step By Step(Lua系统库)
http://www.cnblogs.com/stephen-liu74/archive/2012/04/05/2432762.html
一、日期和时间
二、其他系统调用

Step By Step(Lua-C API简介)
http://www.cnblogs.com/stephen-liu74/archive/2012/04/05/2433428.html
一、基础知识
二、栈
三、C API中的错误处理

Step By Step(C调用Lua)
http://www.cnblogs.com/stephen-liu74/archive/2012/04/20/2460634.html
一、基础
二、table操作
三、调用Lua函数

Step By Step(Lua调用C函数)
http://www.cnblogs.com/stephen-liu74/archive/2012/04/25/2469902.html
一、C函数作为应用程序的一部分
二、C函数库成为Lua的模块

Step By Step(编写C函数的技巧)
http://www.cnblogs.com/stephen-liu74/archive/2012/04/25/2470025.html
一、数组操作
二、字符串操作
三、在C函数中保存状态

Step By Step(userdata)
http://www.cnblogs.com/stephen-liu74/archive/2012/04/26/2471389.html

---EOF---

正如作者在文后说的,如果对他的内容有指正,可以加他的MSN,或者发邮件到:stephenland74@hotmail.com

作者说,他其实就是:I am Stephen Liu.有点象周星星同学,stephen chow?

转:lua 5.2 的 _ENV

这篇文章是云风的博客上的文章,知道云风是在做游戏,也知道他一直在做lua、C的开发。
我也是最近才刚刚开始看lua,主要是看了一眼之后就发现,原来lua,连函数的写法,对象的格式(tabledata),几乎都一样。所以,在开始关注着。
今天看到这篇文章,转贴是因为,看到云风写的这段代码:

XML/HTML代码
  1. function foobar(env)  
  2.     return setfenv(  
  3.     function()  
  4.         local ret = {}  
  5.         function ret.foo()  
  6.             ...       
  7.         end  
  8.         function ret.bar()  
  9.             ...  
  10.         end  
  11.         return ret  
  12.     end , env) ()  
  13. end  

超级象javascipt,比如可以写成:

XML/HTML代码
  1. function foobar(env){  
  2.     return setfenf(function(){  
  3.         var ret = {};  
  4.         ret.foo = function(){};   
  5.         ret.bar = function(){};  
  6.         return ret;  
  7.     },env)();  
  8. }  

感觉有点超象。。。
上原文了。地址:http://blog.codingnow.com/2011/12/lua_52_env.html

lua 5.2 正式发布了,对于 lua 语言本身的修改,重中之重就是对 environment 这个概念的修改。

可以说, 5.1 以前的 environment 已经没有了。environment 对于制造一个安全的沙盒(或是实现 DSL)是一个很重要的语言特性,我以前很喜欢使用,但也很容易用错。这次的修改我认为是一个谨慎的决定,并使得 lua 语言更为精简和严谨了。

我这样理解 5.2 中的 environment 。本质上,lua 取消了原有意义上的 environment 。所以我们可以看到 C Function 不再有环境了。function 、在 lua 中称为 closure ,仅仅只是函数体和 upvalue 的联合体。这简化了 lua 语言本身。全局变量实际上只是一个语法糖,编译时再前面加上了 _ENV. 的前缀。这样,从 load 开始,第一个 chunk 就被加上了 _ENV 这个 upvalue ,然后依次传递下去。

这个设计基本可以取代以前使用 getfenv/setfenv 改变函数环境的方法。但是又不完全等价。总体来说,增加了一些限制,但不太容易写出 bug 的代码了。

比如说,现在想给返回一个独立环境的函数,可以这样写:

function foobar(env)     local _ENV = env     return function() ... end end

而以前大约是这样:

function foobar(env)     return setfenv(function() ...  end, env) end

这不太看得出好坏,但是如果是一组函数,就有区别了。5.2 中是这样:

function foobar(env)     local _ENV = env     local ret = {}     function ret.foo()         ...          end     function ret.bar()         ...     end     return ret end

5.1 的等价代码大约是这样:

function foobar(env)     local old = getfenv()     setfenv(1,env)     local ret = {}     function ret.foo()         ...          end     function ret.bar()         ...     end     setfenv(1,old)     return ret end

或者这样更函数式一点:

function foobar(env)     return setfenv(     function()         local ret = {}         function ret.foo()             ...              end         function ret.bar()             ...         end         return ret     end , env) () end

getfenv/setfenv 更灵活,却更容易出错。

对于制作沙盒来说,我感觉 lua 5.2 会更为鼓励使用 load 这种运行时的编译行为。即一定程度上的鼓励元编程。(因为取消了 setfenv ,所以给了 load 显式的参数来制定给 chunk 一个新的环境)

btw, 这个语言设计变更的同时也增强了函数式编程的性能。因为 lua 现在可以更方便的合并那些有相同 upvalue 的 closure 了。(从前除了 upvalue 还有 environment ,合并行为更为复杂)


12 月 30 日补充:

如果非要类似 setfenv 的功能, 修改一组函数的 _ENV 大概需要这样做了:

function getfuncs()   local _ENV = _ENV   local ret = {}   function ret.foo()     ...   end   function ret.setfenv(env)     _ENV = env   end   return ret  end

Tags: lua, 云风