jjzjj

lua-userdata

全部标签

Lua:面向对象/C之间的交互

前段时间对平台的任务感兴趣,其要求是一周内12篇博文,尝试了之后发现还是太敷衍了,之后还是回归到内容本身上来,尽量保证一篇博文的内容能涵盖足够多的知识点或者足够深的思考成分。面向对象面向对象主要有三个方面:封装、继承和多态。Lua若做到了这三点,则认为是也具有面向对象的特征。Lua可以通过表来实现上面三个特征。类类本身的概念就是创建对象的模板。然而Lua本身不存在类的概念,但是可以创建一个原型(prototype)对象,当调用不属于对象的某些操作时,会最先到prototype中查找这些操作。在lua中若想要对象b作为对象a的prototype只需要以下代码:setmetatable(a,{__

Java和Lua的完美结合:实现Java程序的动态扩展和脚本自动升级

Lua是一种轻量级的脚本语言,常用于游戏开发和嵌入式系统中。它与Java不同,Lua不支持多线程和原生GUI编程。因此,在一些场景下,我们需要将Java和Lua结合起来使用,以弥补两者的不足。本篇博文将介绍如何在Java程序中使用Lua代码,并且在Lua中调用Java代码。一、在Java中使用Lua1.1.使用LuaJ库LuaJ是一个Java实现的Lua解释器,它提供了Java与Lua之间的桥梁。它的实现原理是使用JNI技术将Java和Lua进行绑定,并提供了Java对Lua的封装。具体来说,LuaJ的实现包括三个部分:(1)Lua语言编译器LuaJ使用Lua语言编写了一组Lua编译器,用于将

Redis加Lua脚本实现分布式锁

先讲一下为什么使用分布式锁:在传统的单体应用中,我们可以使用Java并发处理相关的API(如ReentrantLock或synchronized)来实现对共享资源的互斥控制,确保在高并发情况下同一时间只有一个线程能够执行特定方法。然而,随着业务的发展,单体应用逐渐演化为分布式系统,多线程、多进程分布在不同机器上,这导致了原有的单机部署下的并发控制策略失效。为了解决这一问题,我们需要引入一种跨JVM的互斥机制来管理共享资源的访问,这就是分布式锁所要解决的核心问题。Lua介绍Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的

Lua学习笔记之迭代器、table、模块和包、元表和协程

迭代器迭代器是一种对象,它能够来遍历标准库模板容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址,在Lua中迭代器是一种支持指针类型的结构,他可以遍历集合的每一个元素。泛型for迭代器泛型for自己内部保存迭代函数,实际上保存三个值:迭代函数、状态常量、控制变量。泛型for迭代器提供了集合的key/value对,array={"Hello","Tony","Chang"}--for迭代器遍历forkey,valueinpairs(array)doprint(key,value)end结果:事实上使用Lua默认提供的迭代函数ipairs,我们常常使用函数来描述迭代器,下面从函数角度分析p

c++ - 将成员函数添加到绑定(bind)到 Lua 的 C++ 类

我一直在研究如何将C++类绑定(bind)到Lua以便在游戏引擎中使用,我遇到了一个有趣的问题。我一直在关注这个网站上的教程:http://tinyurl.com/d8wdmea.在教程之后,我意识到他建议的以下代码:localbadguy=Monster.create();badguy.pounce=function(self,howhigh,bonus)self.jumpbonus=bonusor2;self:jump(howhigh);self:rawr();endbadguy:pounce(5,1);只会将突袭功能添加到怪物的特定实例。所以我将他建议的脚本更改为以下内容:fun

C++/Lua FFI 将用户数据呈现为表格?

我在C++中有以下简单代码,其中Object是一个标准容器:staticintcreate_an_object(lua_State*L){autoobj=static_cast(lua_newuserdata(L,sizeof(Object*)));*obj=another_valid_obj;luaL_newmetatable(L,"object_metatable");lua_pushcfunction(L,object_metatable_function);lua_setfield(L,-2,"__index");lua_pop(L,1);return1;}staticinto

c++ - SWIG Lua 和传递数组

我目前有以下lua代码:g=engine.CGeometry()vertexes={}vertexes[1]=0vertexes[2]=0vertexes[3]=0vertexes[4]=0vertexes[5]=-1vertexes[6]=0vertexes[7]=-1vertexes[8]=0vertexes[9]=0print"addingvertexes"g:SetVertexes(vertexes)其中g:SetVertexes()在C++中的实现方式为:voidCGeometry::SetVertexes(double*vertexes){this->vertexes=ve

c++ - 如何在 LUA 中创建 C++ 兼容函数对象?

我正在考虑如何设计我的API,我计划在LUA中创建一个带有脚本层的C++应用程序。对于我设计中的几个关键点,我想让用户能够创建一个函数对象来表示他想在LUA中做什么,而不是将这个函数对象从LUA发送到C/C++。在伪代码中,在C++中我有一个classTclassT{...intnum1=0;floatnum2=0.0f;std::stringstr{"NONE"};...};我想像这样用LUA提供的functionobject操作T的实例voidapplyFunc(Tt,Ff){f(t);}问题是我在LUA中找不到任何创建函数对象的东西,例如C++11lambda或std::func

c++ - <eof> 附近的 lua 函数参数

我尝试在C++项目中使用lua。对于lua执行,我这样写:#include...luaEngine=luaL_newstate();luaL_openlibs(luaEngine);register_results(luaEngine);//Forregisterc++objectintheLUAscriptasmetatablelua_pushstring(luaEngine,resultsId.c_str());lua_setglobal(luaEngine,"resultsId");lua_pushboolean(luaEngine,needReloadModel);lua_se

c# - 从 Lua 5.1 移植到 5.2

我在将一些较旧的Lua5.1代码移植到Lua5.2时遇到了一些问题。我希望能够使用现有的Lua5.2dll/lib,因此任何移植都需要使用Lua5.2的现有API来完成。为了让它更复杂一些,我使用DllImport来P/Invoke一些LuaAPI调用。这意味着所提供的任何#define快捷方式都将不起作用。例如使用lua_pushglobaltable是不可能的。大多数更新是必需的,因为LUA_REGISTRYINDEX不再可访问。到目前为止,我有以下内容:1a)替换lua_pushstring(luaState,"tablename");lua_settable(luaState,