草庐IT

lua_tonumber

全部标签

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,

C++ 与 Lua 的协程交互

零、前言Lua语言不支持真正的多线程,即不支持共享内存的抢占式线程。这样的模式能减少一些多线程的问题。多线程的问题源于线程抢占和共享内存,而如果非抢占式线程或者不使用共享内存则能避免多线程问题,Lua同时支持这两种方案。从之前分享的《Lua协程》文章中知道:Lua语言的线程是协作式的,即协程,可以避免因不可预知的线程切换带来的问题。Lua状态间内存不共享,所以各个状态相互独立运行,可以并行操作。一、多线程从C-API的角度,可以把线程当作一个栈,每个栈保存着一个线程中挂起的函数调用信息,以及每个函数调用的参数和局部变量。也就是说,一个栈包括了一个线程得以继续运行所需的所有信息。因此,要达到多线

c++ - 为嵌入式 Lua 脚本设置 'environment'

我在C++应用程序中嵌入了一个Lua解释器。我想为运行脚本设置一个“环境”,以便所有脚本都可以使用某些变量。例如,我想将只读对象Foo和FooBar公开给脚本,这样Foo和FooBar可用于所有正在运行的脚本。有谁知道我该怎么做?展示如何做到这一点的片段将非常有用。 最佳答案 我没有听说过Lua中的只读变量,但您可以通过函数调用使环境可用来防止修改。如果C++应用程序很大,您可能希望使用工具来生成可以从Lua调用的接口(interface)。我过去曾幸运地使用过tolua++:假设demo.hpp是C++应用程序的头文件:#ifnd