Lua迭代器
标准库提供的几种迭代器:io.lines(迭代文件中的每行),
pairs(迭代table元素),ipairs(迭代数组元素)
string.gmatch(迭代字符串中单词)等。
自定义迭代器迭代器与闭包pairs见next
在Lua中使用gettext实现多语言支持
本文系转载,原文链接:http://zengrong.net/post/1986.htm感谢原作者无私分享。
在Lua中使用gettext实现多语言支持
2016-06-07更新:加入gettext包含的工具简介。
GNU gettext 是一套优秀的国际化工具。在 linux 中被大量采用。wordpress 也使用 gettext 实现多语言支持。
本文介绍如何在 quick-cocos2d-x 中使用 gettext 做多语言支持。同时介绍多语言翻译工具 poedit 对 Lua 语言的支持。
gettext 简介gettext 是一套工具集的名称。这套工具集包含 xgettext/msginit/msgfmt 等一套建立模版(POT)、创建PO文件和编译MO文件的工具。
gettext 包含的工具如下:
xgettext 从源码中生成POT模版或直接生成PO文件;
msginit 基于POT文件生成待翻译的PO文件;
msgfmt 将PO文件编译成二进制的MO文件;
msgunfmt 顾名思义,将MO文件反编译成PO文件;
msgmerge 将POT模版文件与PO文件合并。 ...
LuaFramework
思考并回答以下问题:
在上一篇文章LuaFramework-1中,介绍了LuaFramework加载面板的方法,但这个方法并不适用于其它Prefab资源,在这套框架中非面板型资源的加载方法另有套路。
创建一个预制体打开上次使用的工程,打开Main场景,创建一个名为ImgOrc的Image,图片就选例子用的兽人头像。在Assets/LuaFramework/CustomPrj目录下新建一个Prefabs目录,然后拖动ImgOrc到该目录下做成预制体,如图1-1
2、将预制体打成AssetBundle包打开Assets/ LuaFramework/Editor/Packager.cs文件(用VS或Mono Develop编辑器打开),找到HandleExampleBundle方法,添加对ImgOrc预制体的打包代码,如图1-2所示
图1-2
12345678910111213141516171819/// 处理框架实例包/// </summary>static void () { string resPath = AppDataPath + "/" + A ...
采访 Lua 发明人
<div class="entry">
<p id="fortitle"> 2012-12-03
转载云风的一篇文章
采访 Lua 发明人的一篇文章
《Masterminds of Programming: Conversations with the Creators of Major Programming Languages》是本相当不错的书。博文翻译出版了这本书,中文名叫做《编程之魂》。
书是好书,可惜翻译这本书需要对各种语言的深入研究,看起来译者有点力不从心。出版社打算重新做这本书。受编辑所托,我校对了其中第七章:有关 Lua 的一段。原文读下来拍案叫好。可惜译文许多地方看起来有些词不达意。许多在口语化交流中提到的术语被忽略了做了错误的翻译。有些部分应该是对 lua 理解不够而没能表达清楚。
仔细校对了两段后,我干脆放弃原译本,自己动手翻译了一份(保留了不到 1/4 原来的译文)。虽然个 ...
Lua 学习 chapter2
目录
Eeight Queen
判断是否可以放置
递归放置
只打印第一个值
排列的方式
对比
Love is you power, chek your power, and try your best.
Eight Queen
8皇后问题:
在一个8*8的棋盘上放置八个皇后,她们之间相互不能影响。
通过一个表来存储,键值表示行,值表示列。
判断是否可以放置
因为键值已经保证不会再同一行,所以我们需要判断的就只有列和斜方向的。
在斜方向,左斜和右斜。右斜列减行相同则同处一斜行。左斜行列相加则处于同斜行。
1
2
3
4
5
6
7
8
9
10
local function checkAttack(table, n, c)
for i = 1, n - 1 do
if (table[i] == c) or
(table[i] - i == c - n) or --行列式
(table[i] + i == c + n) then
return ...
深入 Lua Garbage Collector(五)
有了前几天的基础,我们可以从顶向下来读 lua gc 部分的代码了。慢慢的,感觉我这个系列都可以叫跟着云风一起看Lua源码了,虽然自己看的是最新的5.3。挖个坑,之后应该会真的跟着云风大大的那本readinglua一起看完lua的最新源码。
lua_gc我们知道,lua 对外的 API 中,一切和 gc 打交道的都通过 lua_gc 。C 语言构建系统时,一般不讲设计模式。但模式还是存在的。若要按《设计模式》中的分类,这应该归于 Facade 模式。代码在 lapi.c 的 1011 行:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970** Garbage-collection function*/LUA_API int (lua_State *L, int what, int data) { int res = 0; global_State *g; lua_l ...
Lua
1 变量在使用前,必须在代码中进行声明,即创建改变量; Lua的变量类型:全局变量、局部变量、表中的域; Lua的变量全是全局变量,即便是语句块或者是函数里,除非使用local显示声明为局部变量; 局部变量的作用域从声明的位置开始,到所在语句块结束; 变量的默认值均为nil;
2 赋值 Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量
eg:
a, b = 10, 2*x 等价于 a=10; b=2*x
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
1) 变量个数 > 值的个数 按变量个数补足nil
2)变量个数 < 值的个数 多余的值会被忽略
多值赋值经常用来交换变量,或将函数调用返回给变量:
eg:
a, b = f()
f()返回两个值,第一个赋给a,第二个赋给b。
应该尽可能的使用局部变量,有两个好处:
1. 避免命名冲突。
2. 访问局部变量的速度比 ...
Lua学习笔记二
while1234while(条件)do 循环体end
代码示例及结果:
123456a = 0while(a < 10)do print(a) a = a + 1end
123456789100123456789
for123for var=值1,值2,值2 do 循环体end
从值1变化到值2,每次变化以值3为步长,执行一次循环体。表达式3不指定时默认为1.
代码示例及结果:
123for i = 0,10 do print(i)end
1234567891011012345678910
变化范围包含值2
for 遍历table:
1234table = {"a","b","c"}for i,v in ipairs(table) do print(i,v)end
1231 a2 b3 c
repeat…until123repeat 循环体until(条件语句)
执行循环体,直到条件语句成立
代码示例及结果:
12345i = 0repeat print(i) i = i+1until(i>10)
123456 ...
Lua笔记效率性能
本文使用对比测评的方式比较了几种Lua中代码和方式,并做了简要的总结和分析。结合其中结论,可指导写出质量更高、性能更优的脚本。本文基于Lua5.1,大部分内容也同样适用于Lua5.2和5.3。本文中引用到的Lua源代码都取自Lua 5.1.5版本。
评测方法主要有运行时间和产生GC两个指标,以下是获取运行时间和内存用量/GC的方法:
获取运行时间为了更好地做比较,使用下边的方法来记录代码的运行时间:
1234567local a, ba = os.clock()b = os.clock()print(b-a)
获取内存用量12345collectgarbage("stop")collectgarbage("collect")print(collectgarbage("count"))
上边三行代码都是调用函数collectgarbage(),配合传入的不同的参数达到不同的目的:
stop 停止自动GC
collect 执行一次完整的GC循环
count 返回当前内存用量,以k为单位
使用local保存全局变量的引用使用local ...
lua之运算符
lua运算符 算术运算符 +,-,*(乘),/(除),%(取余),^(乘幂),-(负号) 关系运算符 ==(等于),~=(不等于),>,<,>=,<= 逻辑运算符 and,or,not 其它运算符 ..(连接符),#(一元运算符,返回字符串或表的长度) 运算符优先级 not - (unary) * / + - .. < > <= >= ~= == and or 注:除了^和..外所有的二元运算符都是左连接的。 示例 运算内容 等同 解释后 a+i < b/2+1 <–> (a+i) < ((b/2)+1) 5+x^2*8 <–> 5+((x^2)*8) a < y and y <= z <–> (a < y) and (y <= z) -x^2 <–> -(x^2) x^y^z <–> x^(y^z)