lua 编程
文章平均质量分 78
charlie_2010
这个作者很懒,什么都没留下…
展开
-
细究lua闭包->搞清本质才是王道
Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值相同(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然能定义函数。假设函数f2定义在函数f1中,那么就称f2为f1的内嵌(inner)函数,f1为f2的外包(enclosi转载 2011-08-04 15:04:06 · 534 阅读 · 0 评论 -
lua a
http://blog.csdn.net/fansongy/article/details/7005142http://www.cnblogs.com/glshader/archive/2010/09/11/1823738.html转载 2012-09-04 19:15:43 · 493 阅读 · 0 评论 -
lua访问C++类简单手工实现
参考luna代码. #include "stdafx.h"extern "C"{ #include "lua.h" #include "lauxlib.h" #include "lualib.h"}#include #include #include class lua转载 2012-09-13 19:13:11 · 688 阅读 · 0 评论 -
编写高效Lua代码的方法
基础1 尽量使用local 使用变量的效率:local > upvalue > global local变量存放在栈中,upvalue存放在链表中,global变量存放在全局的表中。 例子:使用local[javascript] view plaincopyprint?function Add() local原创 2012-11-02 19:49:23 · 983 阅读 · 0 评论 -
luabind windows环境下的搭建
1.下载lua的windows安装文件,安装 2.下载boost的源码安装 ( 然后运行bootstrap.bat) 就会生成bjam.exe3.建立一个cmd的脚本, 运行bjam.exe. 就会编译好 boost.4.设置BOOST_ROOT的环境变量( 源码的安装路径)5.下载luabind源码, 将Jamroot文件中的LUA_PATH全部替换问 LUA_DEV6.拷贝转载 2012-11-03 14:37:44 · 1158 阅读 · 0 评论 -
Linux下Luabind编译和使用环境的搭建
自己弄了下 虽然可以用,但是bjam没安装成功,同事说他可以,把安装步骤发我。按着他的步骤在新的一台机子上安装,和我自己的安装结果是一样的,,,先把安装步骤记录一下,以后有空再查查吧,为什么呀,不成功?1. 安装lua a: make linux //有的机子上会提示 luaconf.h:275:31: error: readline/readline.h: No原创 2012-11-05 16:24:36 · 1677 阅读 · 0 评论 -
lua代码热更新
最近在学习lua,准备在下一个游戏中使用lua作为逻辑部分的开发语言。看中两点,一个是代码不用编译,且容易实现热更新,c++的代码在工程规模大了之后,编译速度很慢,经常是改了几行代码,就要等待长达10几,甚至几十分钟的编译时间。这点对开发速度影响较大。第二,c++程序容易挂。虽然在这个项目中,做到了几乎不挂,但是这其中的对开发人员的要求太高了。基于上面两点,打算在下一个游戏中使用脚本语言作为主原创 2012-05-05 14:00:17 · 2985 阅读 · 0 评论 -
游戏开发的一些经验
lua排序出现崩溃的情况:function sort(x,y)if x.a return trueelseif x.a == y.a thenreturn (math.random(2) == 2)endreturn falseendtbl = {{a = 4,b = 1},{a = 2,b = 2},{a = 1,b = 3},{a = 10,原创 2013-02-20 09:53:51 · 784 阅读 · 0 评论 -
lua的函数的环境和变量
--[[Returns the current environment in use by the function. f can be a Lua function or a number that specifies the function at that stack level: Level 1 is the function calling getfenv.If the give原创 2013-02-20 15:04:33 · 1088 阅读 · 0 评论 -
dofile, loadfile, loadstring, require, module
1、函数dofile()和loadfile(): dofile():读入文件编译并执行 loadfile():编译代码成中间码,并返回编译后的chunk作为一个函数 ,而不执行代码,并且不会抛出错误信息,而是返回错误码和nil; 另外,运行一个文件多次的话,loadfile只编译一次,但可多 次运行;dofile每次都要编译; dofile()本质上位辅助函数,真正实现其功能的转载 2013-05-27 15:16:37 · 1760 阅读 · 0 评论 -
lua table.sort的bug
总结:不能用 > tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2},{5,4},{5,5},{5,1},{5,3},{3,3},{4,2},{3,2}}> function comp(a,b)>> if a[1] >> return true>> else>> return false>> end>> end> t转载 2013-05-27 15:38:56 · 3330 阅读 · 1 评论 -
传递Lua函数到C/C++中
问题在Lua中,因为函数也是第一类值,所以会出现将函数作为另一个函数的参数,或者函数作 为函数的返回值。这种机制在很多地方都能代码更灵活更简洁,例如:table.sort(table [,comp])这里的comp就要求传入一个函数,我们在调用时,大概会有如下形式:table.sort(t, comp) -- 直接写函数名table.sort(t, local_comp) --转载 2013-05-28 16:11:01 · 2436 阅读 · 0 评论 -
【转】lua和c互相调用的程序示例
虽然也是用programming in lua这本书的给的代码基础上整合的。推荐这本书,挺不错。该程序是lua 和C++之间调用的关系,怎么互相调用函数,怎么创建用户自定义用户。也就是programming in lua 后面第四篇的内容这个程序我是能够运行的。不过注意项目的配置和相应的lua文件路劲要正确。呵呵。加油。*/#include #include #include原创 2013-05-28 16:12:30 · 1388 阅读 · 0 评论 -
luac 的使用
C:\Users\wq>edit t.luaC:\Users\wq>luac -o t.lc t.luaC:\Users\wq>luac -l t.lcmain (20 instructions, 80 bytes at 002814C0)0+ params, 4 slots, 0 upvalues, 0 locals, 7 constants, 1 fu原创 2013-05-30 20:04:10 · 3332 阅读 · 0 评论 -
lua绑定C++对象学习
>中学习了闭包,元表和lua的面向对象实现后,我被的元机制震撼了,果断体会到了如果把自己禁锢在C++的圈子里坐井观天是多么的可惜.来看看超轻量级对象绑定luna类的使用和实现吧.首先,它的使用比较简单(luna没实现继承,类型检查等,毕竟只是一个可供借鉴和学习的最基础实现而已),代码如下: 1 extern "C" 2 { 3 #include 4 #include转载 2015-06-19 17:58:28 · 631 阅读 · 0 评论 -
lua
local address_num = 6local recent_num = 6local m_online_count_ = 20local total = 6local address = 0local recent = 0local online = 0local address_flag = 0local recent_flag = 0原创 2012-08-01 20:13:53 · 441 阅读 · 0 评论 -
当使用lua_call时,请用lua_atpanic为其设置panic函数
为何使用lua_atpanic当调用无保护的lua_call后,如果调用栈发生错误(lua_error),那么默认行为是直接退出宿主程序。(可以参考这篇文章)要避免这样的情况,一种方法是定义自己的panic函数,并作为参数调用lua_atpanic;此外为了避免退出宿主程序,自定义的panic函数应该永不返回(通常是做一个长跳转,令其跳转至lua_call调用点,不过这种做法几乎与lua_转载 2012-05-29 14:39:33 · 3843 阅读 · 0 评论 -
LUA中的类型强转
众所周知,lua里的变量都没有类型的定义,是啥东西直接拿出来用就行,用错了运行时会报错不执行,类型强转这种操作似乎没啥用武之地。的确在单独使用脚本语言的环境里语言本身并不关心类型,但如果要与宿主语言交互,并且还利用了userdata或lightuserdata对象与C里面的操作和转载 2011-08-08 09:56:17 · 2393 阅读 · 0 评论 -
lua 中 调用 union 对象
最近用luatinker发现真的挺好用,不仅可以轻松把 c++ 中 class 和 struct 对象导给 lua来调用, 而且连union 对象一样可以支持。和 class 一样,一个union 如果需要让 lua中能创建能使用 ,必须调用 class_add,class_转载 2011-08-08 09:37:55 · 1309 阅读 · 0 评论 -
Metatable In Lua 浅尝辄止
什么是Metatable Lua中Metatable这个概念, 国内将他翻译为元表. 元表为重定义Lua中任意一个对象(值)的默认行为提供了一种公开入口. 如同许多OO语言的操作符重载或方法重载. Metatable能够为我们带来非常灵活的编程方式.转载 2011-08-08 15:26:38 · 521 阅读 · 0 评论 -
Lua语言中pairs和ipairs的区别
tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = "dos"}for key, value in ipairs(tbl) doprint(key, value)end--pairs()--pairs()函数基原创 2011-09-09 16:35:39 · 606 阅读 · 0 评论 -
在Lua中调用C++函数
在Lua中调用C++函数我的第二部分教程讲解了怎样在C++中调用Lua函数。在这部分中,我们将讨论相反的情况——在Lua中调用C++函数。由于我没有想到一个简单的例子来说明这种情况,因此,我借用了Lua官方文档中的average函数来进行讲解。本教程涵盖了Lua5.1。在转载 2011-08-18 18:06:03 · 603 阅读 · 0 评论 -
Lua 的upvalues的访问
函数function add( x)local tmp = xlocal Mgr = {1,211}local t1 ={111,2222}return function(y)local tttt = x原创 2011-08-23 19:50:54 · 931 阅读 · 0 评论 -
Lua的sleep函数
一个不幸的消息是Lua中没有内置sleep函数,我们需要DIY。有4种方法可以实现sleep函数,如下:方法1--在一个死循环中设置一个跳出条件,但是这样的做法会占用大量CPU资源,强烈不推荐使用哦function sleep(n) loc原创 2011-08-25 21:56:15 · 6266 阅读 · 1 评论 -
LUA中的TABLE函数库
一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明. table.concat(table, sep, start, end)concat是concatenate(连锁, 连接)的缩写. table.co转载 2011-08-23 13:40:47 · 545 阅读 · 0 评论 -
LuaTinker 使用
LuaTinker的作者是Kwon-il Lee韩国人写的,最新的版本是0.2.C,这个C++ wrapper For Lua能够方便和快捷与C/C++通信,LuaTinker参考了luabind和luaplus的特征写的,虽然没有bindlua和luaplus这本强大和转载 2011-10-10 10:19:55 · 1298 阅读 · 0 评论 -
介绍LuaPlus: 好用的Lua For C++扩展(修订)
LuaPlus是Lua的C++增强,也就是说,LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C++进行合作,是比较好的一个选择。LuaPlus目前版本为:LuaPlus for Lua 5.01 Distribution Build 1080 (February 28, 2004)。大家可以到http://luaplus.org/ 站点下载:源码 (http://wwhi原创 2011-12-09 15:23:17 · 577 阅读 · 0 评论 -
lua table操作实例详解
lua_gettablelua_getglobal(L, "mytable") lua_pushnumber(L, 1) lua_gettable(L, -2) lua_settablelua_getglobal(L, "mytable") lua_pushnumber(L, 1) lua_pushstring(L, "a原创 2012-01-04 10:41:02 · 4088 阅读 · 0 评论 -
c++对象导出到lua
这些东西是平时遇到的, 觉得有一定的价值, 所以记录下来, 以后遇到类似的问题可以查阅, 同时分享出来也能方便需要的人, 转载请注明来自RingOfTheC[ring.of.the.c@gmail.com] 虽然有tolua++, luabind等等, 不过自己手动绑定还是有助于更深的了解lua的机制, 以及锻炼自己如何使用lua提供的现有机制来实现自己的需求[部分内容来自转载 2012-04-10 15:11:52 · 686 阅读 · 0 评论 -
Lua 学习笔记:C API 遍历 Table
前情提要Lua 通过一个虚拟栈与 C 的交互,正数索引自底向上取值,负数索引自顶向下取值。Lua 中的 Table(表)结构可以使用任何数据作为 key 进行取值。使用 C API 访问 Table 中的元素有两种方法:lua_getglobal(L, t);lua_pushinteger(L, k); -- 这里可以换成其它类型的 lua_pushXXXX(L, k) 压数转载 2012-04-12 10:13:07 · 1426 阅读 · 0 评论 -
把C++对象绑定到Lua
游戏中的使用脚本语言已经成为了一个标准应用。脚本语言能够在游戏开发中扮演一个重要的角色,并且让数据结构化,计划事件,测试和调试这些工作更加容易。脚本语言也能够允许像美术,策划这些非程序专家通过一个高层的抽象脚本来为游戏编写代码。这个抽象层的一部分也能够允许提供给玩家来定制整个游戏。 从程序员的角度上来看,把一个脚本语言嵌入到游戏中最主要的问题是如果为脚本语言提供对宿主对象的访问(通常是C/转载 2012-04-25 10:16:30 · 2213 阅读 · 0 评论 -
lua 热更新原理(一)
热更一般是针对模块的线上替换。我们动态加载要热更的模块试试。例如,我们在循环间隔加载某模块,这样就能有时间去更改模块了。测试的代码如下:for i = 1, 5 do local m = require('other') print('other.a is ', m.a) Sleep(5)end我们循环加载了other这个模块他仅仅返回一个local table {...转载 2018-12-04 19:37:18 · 1259 阅读 · 0 评论