lua
文章平均质量分 70
luyafei_89430
这个作者很懒,什么都没留下…
展开
-
Step By Step(Lua弱引用table)
Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们。然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理。这样就极有可能导致很多垃圾对象无法被释放。为了解决这一问题,就需要Lua的开发者予以一定程度上的配合。比如,当某个table对象被存放在容器中,而容器的外部不再有任何变量引用该对象,对于这样的对象,Lua转载 2014-11-07 14:56:31 · 743 阅读 · 0 评论 -
lua中求table长度
关于lua table介绍,看以前的文章http://www.cnblogs.com/youxin/p/3672467.html。官方文档是这么描述#的:取长度操作符写作一元操作 #。 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。table t 的长度被定义成一个整数下标 n 。 它满足 t[n] 不是 nil 而 t[n+1] 为 nil; 此外,转载 2014-11-05 18:02:16 · 50181 阅读 · 0 评论 -
浅析Lua中table的遍历
当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是:for key, value in pairs(tbtest) do XXX end for key, value in ipairs(tbtest) do XXX end for i=1, #(tbtest) do转载 2014-11-05 16:18:59 · 908 阅读 · 0 评论 -
lua编程 全局变量 环境 模块
1.全局变量与环境lua中真正存储全局变量的地方不是在_G里面,而是在setfenv(i,table)的table中,所有当前的全局变量都在这里面找,只不过在程序开始时lua会默认先设置一个变量_G=这个里面的table而已。所以在新设置环境后,如果还想找到之前的全局变量,通常需要附加上为新的table设置元表{_index=_G}下面的几个例子:a=1prin转载 2014-11-04 13:27:32 · 580 阅读 · 0 评论 -
lua面向对象模拟简介
lua不是面向对象语言,但可以通过表(table)和元表(metatable)来模拟。table 是 lua 中唯一的一种数据结构,它可以用来描述原始的数组、符号表、集合、 记录、图、树等。每一个tabel都可以附加元表, 元表是带有索引集合的表,它可以改变被附加表的行为。因此,lua可以利用元表来模拟面向对象的行为。首先需要了解下面四个东东:__index,__newindex,rawg转载 2014-11-04 16:40:26 · 723 阅读 · 0 评论 -
遍历Lua全局环境变量
Lua全局变量Lua解释器提供了很多全局变量,比如print等,便于程序开发。Lua提供的所有全局变量都保存在一个普通的表_G中。目前Lua-5.2.1中_G中的全局变量主要有“字符串”、“函数”及“表”三种。那该如何遍历这些值呢?(当然,你在会话中进行的任何变更,都将对其造成影响,除非有local限定)如何遍历Lua提供的全局变量?既然_G是一个普通的表,那么我们可以采用for语转载 2014-11-04 13:22:16 · 8195 阅读 · 0 评论 -
lua5.1中的setfenv使用
setenv是在lua5.1中有的改变函数作用域的函数。用法是setenv(func or number,tbl),第一个参数可以是数字也可以是函数,数字1表示当前的作用于,2表示上一层的作用域,特殊情况0,setfenvchanges the environment of the running thread. In this case,setfenv returns no values转载 2014-11-04 18:40:58 · 2134 阅读 · 0 评论 -
细究lua闭包->搞清本质才是王道
Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值相同(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然能定义函数。假设函数f2定义在函数f1中,那么就称f2为f1的内嵌(inner)函数,f1为f2的外包(enclosing)函数,外包和内嵌都具有传递性,即f2的内嵌必然是f1的内嵌,而f1的外包也一定是f2的外包。内嵌函数能访问外包函数转载 2014-11-03 14:13:45 · 663 阅读 · 0 评论 -
Step By Step(Lua模块与包)
从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块。从使用者的角度来看,一个模块就是一个程序库,可以通过require来加载,之后便得到一个类型为table的全局变量。此时的table就像名字空间一样,可以访问其中的函数和常量,如:1 require "mod"2 mod.foo()3 local m2 = require "mod2"4 l转载 2014-11-14 13:52:44 · 721 阅读 · 0 评论 -
Lua 学习笔记(4) -- 模块与包
从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。创建模块其实 Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。格式如下:转载 2014-11-14 14:02:26 · 838 阅读 · 0 评论 -
lua编程 全局变量 环境 模块
1.全局变量与环境lua中真正存储全局变量的地方不是在_G里面,而是在setfenv(i,table)的table中,所有当前的全局变量都在这里面找,只不过在程序开始时lua会默认先设置一个变量_G=这个里面的table而已。所以在新设置环境后,如果还想找到之前的全局变量,通常需要附加上为新的table设置元表{_index=_G}下面的几个例子:a=1prin转载 2014-11-14 13:15:00 · 1118 阅读 · 0 评论 -
Lua的内存监测和回收
Lua内存是自动收集的, 这点跟Java类似, 不被任何对象或全局变量引用的数据,将被首先标记为回收,不需要开发者做任何事情.但是,正如Java也会有内存泄露一样, Lua也会有, 只不过,跟C++的不同,它是由于代码执行所装载的资源,并没有被彻底销毁而导致,其中,最臭名昭著的就是不小心把局部变量声明成了全局变量(忘了加local修饰符)。 类似这样造成的内存泄露, 跟任何其他语言的内存泄露一样,转载 2014-11-07 14:27:23 · 19075 阅读 · 0 评论 -
Lua的weak table和Userdata
weak table是什么意思,建议不要看中文翻译的,我以前看了半天还是没懂啥子意思.lua 手册原文是这样解释的:A weak table is a table whose elements are weak references. A weak reference is ignored by the garbage collector. In other words, if t转载 2014-11-07 15:01:49 · 1006 阅读 · 0 评论 -
collectgarbage简介
Collectgarbage - It does what it says it doesDefinitioncollectgarbage ([opt [, arg]])This function is a generic interface to the garbage collector. It performs different functions according转载 2014-11-07 15:17:24 · 2391 阅读 · 0 评论