tolua++安装
<a href="/2015/11/11/lua_cpp_bind/" rel="next" title="C++与Lua本质原始交互API">
<i class="fa fa-chevron-left"></i>
<p class="post-nav-pre-next-title">
C++与Lua本质原始交互API
</p>
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item"> ...
Lua
table 操作
函数
解释
table.concat (table [, step [, start [, end]]])
函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(step)隔开
table.insert (table, [pos,] value)
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾
table.maxn(table)
指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了)
table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
table.sort (table [, comp])
对给定的table进行升序排序。
table.getn(tableName)
获取表的长度
操作示例
table ...
Lua 学习 chapter22
目录
具有动态名称的全局变量
非全局环境
环境和模块
_ENV和load
只有疯狂过,你才知道自己究竟能不能成功。
具有动态名称的全局变量
在lua中,所有的全局变量都被存在_G中,通过_G[name]可以访问到任意一个全局变量。在lua中,全局变量不需要声明就可以直接使用,但是这个可能会造成非常难以查询的bug,所以我们可以对全局变量进行简单的封装。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
setmetatable(_G, {
__newindex = function(_, n)
error("attempt to write to undeclared variable" .. n, 2)
end,
__index = function(_, n)
error("attempt to read undeclared va ...
Lua之Table个人总结
在lua中Table是数组和集合的混合物。作为数组时,可以使用除了nil以外的值作为索引。
Table的构造利用下标来标明元素123456local table = {}table[1]='hello'table[5]='world'for i,v in pairs(table)do print(table[i])end
输出121 hello5 world
在Table内部通过索引来声明1234local table = { [1] = 'hello', [5] = 'world' }for i, v in pairs(table) do print(table[i])end
输出121 hello5 world
在Table内部不通过索引来声明1234local table = {'hello','world'}for k, v in pairs(table) do print(k,v)end
输出121 hello2 world
Note:
1,可以看到通过 ...
Lua之面向对象个人总结
面向对象的三个特征:封装、继承和多态。Lua并没有类,没有直接实现面向对象的方法。不过Lua的Table,有内部对象和内部方法。Lua的面向对象主要是通过Table来模拟面向对象。
封装在Lua之Table学习中,曾以Computer为例子,介绍了Table 也是可以有自己内部的属性和方法。
1234567891011121314local CPU = { name = 'CPU', cost = 400 }local Monitor = { name = 'bird', cost = 200 }local Memory = { name = 'memory', cost = 100 }local Computer = { description = "this is a computer", cpu = CPU, monitor = Monitor, memory = Memory}function Computer.getDescription() return Computer.desc ...
Lua学习笔记
学习资料地址:http://www.runoob.com/lua/lua-tutorial.html
安装环境 在Windows环境下,使用SciTE来运行Lua程序。
项目GitHub地址:https://github.com/rjpcomputing/luaforwindows/releases
上面的官方下载无法保证下载速度,我使用的是菜鸟教程分流的下载地址:http://static.runoob.com/download/LuaForWindows_v5.1.4-46.exe
开始编程 和Python一样,Lua也有交互式的编程方式。在命令行中输入lua或者lua -i启用。
同时也可以使用脚本式编程,就是将代码存放在一个lua文件中,命令行执行lua xxx.lua即可。
需要注意的是,交互式编程状态下不能使用lua命令,会出现下面的错误,这一点我也是犯了好多次:
1stdin:1: '=' expected near 'hello'
教程中没有提到怎样退出lua环境 。os.exit()退出。
基础知识注释 单 ...
深入 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类机制
lua类机制的简易实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576local _class={} function (super) local class_type={} class_type.ctor=false class_type.super=super class_type.new=function(...) local obj={} do local create create = function(c,...) if c.super then create(c.super,...) end if c.ctor then c.ctor(obj,...) end end create(class_type,...) end setmetatabl ...
Lua
简单模式和完全模式
简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。
完全模式(complete model) 使用外部的文件句柄来实现。它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法。
打开文件
1file = io.open(filename [, mode])
mode 选项
模式
简介
r
只读,文件必须存在。默认。
w
只写,文件存在,则写入时覆盖原有内容。文件不存在,则创建文件。
a
附加写入,文件存在,则从文件末尾写入。文件不存在,则创建文件。
b
二进制模式,与r/w/a结合使用。
+
表示文件可读写,与r/w/a结合使用。
123456789101112file01 = io.open("test.lua", "r")file02 = io.open("test.lua", "rb")file03 = io.open("test.lua", "w")file0 ...
Lua 学习 chapter30 编写c函数的技巧
目录
数组操作
字符串操作
在c函数中保存状态
生活总需要一点仪式感,然后慢慢的像那个趋向完美的自己靠近。
数组操作
Lua中的数组就是以特殊的方式使用边。像lua_setttable and lua_gettable这种用来操作的通用函数,也可以用于操作数组,不过C API为使用整数索引的表访问和更新提供了专门的函数:
1
2
void lua_geti (lua_State *L, int index, int key);
void lua_seti (lua_State *L, int index, int key);
lua_geti相当于:
1
2
lua_pushnumber(L, key);
lua_gettable(L,t);
lua_seti相当于:
1
2
3
lua_pushnumber(L, key);
lua_insert(L, -2);
lua_settable(L,t);
eg:函数map,该函数对数组中的所有元素调用一个指定的函数,然后用此函数返回的结果替换掉对应的数组元素。
1
2
3
4
5
6
7
8
9
10
11
...