
LUA
文章平均质量分 67
DOOM
这个作者很懒,什么都没留下…
展开
-
学习 lua中的闭包
Lua编译一个函数时,会为它生成一个原型(prototype),其中包含了函数体对应的虚拟机指令、函数用到的常量值(数,文本字符串等等)和一些调试信息。在运行时,每当Lua执行一个形如function...end 这样的表达式时,它就会创建一个新的数据对象,其中包含了相应函数原型的引用、环境(environment,用来查找全局变量的表)的引用以及一个由所有upvalue引用组成的数组,而这个数据对象就称为闭包。由此可见,函数是编译期概念,是静态的,而闭包是运行期概念,是动态的。g1和g2的值严格来说不是函转载 2010-09-07 17:14:00 · 580 阅读 · 0 评论 -
LUA 面向对象
类继承的实现方式有三种类式继承、原型继承、掺元继承。lua是采用类式继承。1. PIL中的例子 http://book.luaer.cn/_98.htm2.云风的例子 http://blog.codingnow.com/2006/06/oo_lua.html定义类的函数 ->类的vtbl(除ctor super new外,这3个是定义在 类.xxx 中,而不是 vtbl原创 2012-01-10 15:23:03 · 7048 阅读 · 0 评论 -
Lua面向对象设计中添加super
云风的lua oo 实现方法 http://blog.codingnow.com/2006/06/oo_lua.html无法在子类的函数中使用super:xxx 调用父类的函数。1.直接用父类调用base_type=class() -- 定义一个基类 base_typefunction base_type:ctor(x) -- 定义 base_原创 2012-01-12 15:29:06 · 11880 阅读 · 2 评论 -
简单C++调用lua函数及C++和lua相互函数调用小例子
http://blog.youkuaiyun.com/ym012/article/details/7191932//简单C++调用lua函数,改自网络//test.cpp[cpp] view plaincopy#include extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib转载 2012-03-21 23:23:18 · 14024 阅读 · 0 评论 -
Lua cmodule编写
《Programming in Lua》里面提到“扩展扩展Lua的基本方法之一就是为应用程序注册新的C函数到Lua中去”,还有“当你打算使用C函数来扩展Lua的时候,即使你仅仅只想注册一个C函数,将你的C代码设计为一个库是个比较好的思想:不久的将来你就会发现你需要其他的函数”。 学习这部分用去了我几个小时来实践。我想把我遇到的问题和解决方法和大家分享一下。没准什么时候我自己都忘了怎么做,转载 2012-03-21 19:32:54 · 4072 阅读 · 0 评论 -
lua错误信息
int _tmain(int argc, _TCHAR* argv[]){ Test::Tst_B* b = new Test::Tst_B; // instance used in Lua code lua_State* L = lua_open(); luaL_openlibs(L); tolua_tclass_open(L); i转载 2012-03-23 00:36:12 · 4149 阅读 · 0 评论 -
lua使用 tinycc
1.下载tinycchttp://bellard.org/tcc/http://repo.or.cz/w/tinycc.git 最新的2.编译tcc需要mingw进入 tinycc/win32运行build-tcc.batwin32/libtcc 下面是 libtcc.a 和 libtcc.hwin32 下面是tcc.exe 和 libtc原创 2012-04-20 15:39:05 · 10915 阅读 · 0 评论 -
LUA TIP
lua-zmpluajit FFI库,直接lua脚本中写C语言,省去bind或自己写userdata。LuaRocks Versioned Components For Lua 第3方包管理工具。lrexlib 正则表达式库LOOP:Lua Object-Oriented ProgrammingLuaNode Asynchronous I/O for Luac++ lua wrapp原创 2011-07-15 11:03:00 · 2055 阅读 · 0 评论 -
如何去掉lua函数调用前的self
云风的lua oo 实现方法 http://blog.codingnow.com/2006/06/oo_lua.html继续在云风的类上改 setmetatable(class_type,{__newindex= function(t,k,v) vtbl[k]=v local newgt = {} -- create new environment原创 2012-01-12 15:33:42 · 5579 阅读 · 0 评论 -
缩小lua出错影响范围
如果游戏主逻辑放在lua中,c只是作为网络模块,游戏中lua需要暴露给c的接口很少:1.响应RPC2.timer3.开启服务器4.关闭服务器如果脚本出错, 由于是通过lua_pcall调用脚本的,一次调用为一个崩溃域,不会影响到另一次调用。134,一般一次只会调用到一个函数,这个函数可能会调用到其他很多函数,但是此函数是作为一个模块中完整的逻辑功能的实现。原创 2011-11-10 17:20:43 · 1536 阅读 · 0 评论 -
lua操作数据库
项目中C对lua只开放了C_updateColumn用于写,C_selectDb用于读。想要把直接一个lua table映射更新到一张数据库表比较烦。于是写了以下这些函数方便操作。---一些操作数据库用的工具函数--@author lqkDatabase = {}---原创 2011-07-12 16:00:25 · 6019 阅读 · 0 评论 -
luaDoc 试用心得
--- 继承于某table的属性及函数-- @param selfclass 某table-- @param parentclass 需要继承的table-- @return 继承后的类-- @usage local _widgetnotebox = _Inherit( {}, WIDGET_BASE )转载 2010-09-16 20:58:00 · 2110 阅读 · 0 评论 -
Lua通过COM调用外部程序excel及调用windows api
为了方便起见,最好安装lua for windows,里面已经包含了很多有用的第三方模块。使用lua调用excel,然后往cell里面填一些数据。view plaincopy to clipboardprint?require('luacom') --Excelの起動 excel = luacom.CreateObject("Excel.Application") excel.Visible = true--可視状態に --ワークブックを追加 local book = excel.Workboo转载 2011-03-04 14:52:00 · 2658 阅读 · 0 评论 -
lua __index __newindex upvalue 示例
项目中有个公会对象,数据大部分存在data中,之前都是 u.data.point这样访问,太麻烦了。于是通过设置__index 使之可以直接访问属性,u.point。但是还是不能直接改属性,u.point = 4,所以再设置了__newindex。在设置了setmetatable之后,不能直接给u添加新属性,因为设置了__newindex,新的属性将直接加到u.data中的。这里影响程序的不同结果是upvalue导致的。由于一般程序中有可能动态改data。所以建议用function设原创 2011-05-12 16:29:00 · 5737 阅读 · 0 评论 -
LunarEclipse:IDE FOR LUA
相比luaEclipse缺点是1.不支持luadoc2.还有功能比luaE多,所以解析较多会慢一点,解析出错时文件都打不开,一保存就报错3.lua自带的系统函数没补齐优点:1.有outline2.当前页内的函数有补齐3.可以自己设置颜色4.可以设置code template5.作者更新比luaEclipse勤快原创 2011-03-29 13:19:00 · 1255 阅读 · 0 评论 -
Lua require
今天某XXX.lua脚本中 local socket = require"socket" 死活通不过。这里是c++调用的lua脚本。如果直接脚本解释器中运行 lua XXX.lua是能通过的。查了下:Lua的require:require (modname)用于加载指定的模块。 此函数先检测package.loaded表中是否存在modname,存在则直接返回当中的值,没有则通过定义的加载器加载modname。查找加载器顺序: (1)检测package.preload表是否存在m原创 2011-04-07 16:02:00 · 6897 阅读 · 1 评论 -
Lua的多任务机制——协程(coroutine)
并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制。大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定何时执行哪个任务。另外一种就是协作式多任务(cooperative multitasking),它把决定权交给任务,让它们在自己认为合适的时候自愿放弃执行。这两种多任务方式各有优缺点,前者固有的同步问题使得程序经常有不可预知的行为,而后者则要求任务具备相当的自律精神。 协程(转载 2011-05-30 09:57:00 · 1265 阅读 · 0 评论 -
lua coroutine 参数说明
测试代码: function coo(k, v) print("co:", k, v) local b = coroutine.yield(k + v) print("co:", b) return 5endlocal co = coroutine.create(coo)local status, a = coroutine.resume(co, 1, 2)原创 2011-06-10 11:16:00 · 2498 阅读 · 0 评论 -
Lua动态加载模块
重新加载模块function reload( moduleName ) package.loaded[moduleName] = nil require(moduleName)end 使用以上代码即可重新载入一个文件。这样修改完lua代码后,可以不用重启程序立刻生效。 原代码模块A:A = {}fun原创 2011-06-21 17:10:00 · 9357 阅读 · 1 评论 -
lua5.2 改动
第三方cmodule,如使用luaL_register需要改为 luaL_newlib。如lfs库luaL_register (L, "lfs", fslib) 改为luaL_newlib(L,fslib);。这里本来第二个参数是表明,非nil是把所有接口放到一个全局变量table中,nil就是所有接口都是全局函数。现在是强制取消全局接口了。所有第三方库没有gloable的函数了,所以使用时都原创 2012-03-21 19:44:23 · 19741 阅读 · 0 评论