我知道可以使用Luabind向Lua公开的OO系统创建Lua类:
class 'lua_testclass'
function lua_testclass:__init(name)
self.name = name
end
function lua_testclass:print()
print(self.name)
end
a = lua_testclass('example')
a:print()
但是,我无法理解如何在另一个命名空间中对类进行范围调整,因此我可以执行以下操作:
a = MyScope.lua_testclass(
我在redis.lua中启动Redis连接池,通过从C调用,我得到了一个redis_lua_state,这个Lua状态是全局启动的,而其他线程只能从它得到。
当有一个HTTP请求(工作线程)时,我需要从redis_lua_state中获取一个Redis连接,然后新的Lua状态来加载其他Lua脚本,而这些脚本将使用这个redis连接与redis通信,如何做到这一点?或者如何设计我的Lua脚本使其变得简单?
代码示例:
/* on main thread, to init redis pool connection */
lua_State *g_ls = NULL;
l
就像标题中问的那样,假设我想向table类型添加一个自定义方法,比如说table:printContent(),在Lua中有什么方法可以实现这一点吗?我的意思是只有,纯粹的,路亚。例如,在C#中,您可以使用扩展来做到这一点:
using System;
namespace Main {
public static class Extension {
public static void printContent(this table mytable) {
foreach(var content in mytable) {
假设我在Lua中注册了许多不同的函数名到C中的同一个函数,那么,每次调用我的C函数时,有没有一种方法来确定哪个函数名被调用了呢?
例如:
int runCommand(lua_State *lua)
{
const char *name = // getFunctionName(lua) ? how would I do this part
for(int i = 0; i < functions.size; i++)
if(functions[i].name == name)
functions[i].Call()
}
int main()
{
...
我想传递给一个期望纯虚拟类的C++对象的函数,一个从纯虚拟C++类派生的类的Lua对象。我该怎么做呢?
我是新来lua和luabind的,请耐心听我说。
在C++中:
struct A {
virtual void foo() = 0;
};
void do_something(A* a) {
a->foo();
}
在Lua中:
class 'MyA' (A)
....
function MyA:foo()
print('hi')
end
再次在C++中:
... // somehow create an instance of MyA c
我尝试在一个名为"Point“的文件"basic.lua”上定义我的类,并试图在文件"main.lua“上实现它,但我一直收到这个错误:
Error
Syntax error: basic.lua:3: '(' expected near 'Point'
Traceback
[C]: at 0x7ffc269728f0
[C]: in function 'require'
main.lua:3: in function 'load'
[C]: in function 'xpcall'
我正在尝试从that内部运行一个lua脚本,该脚本导入"pgmoon“库。我可以导入pgmoon并打开一个套接字,但是接下来我会遇到这样的情况:
[ALERT] 082/234313 (8) : Lua function 'queue-request': runtime error: /usr/local/share/lua/5.3/pgmoon/init.lua:269: module 'pgmoon.crypto' not found:
no field package.preload['pgmoon.crypto']
no file
在Lua中,我一直在寻找为什么以及如何在定义Lua中的“类”时“尝试调用字段‘copy’(零值)”。
local factionClass = {}
factionClass.Name = "throwaway"
function factionClass:New(name)
local newFaction = table.Copy(factionClass)
if name then
newFaction.Name = name
end
return newFaction
end
factionCoolguys = Fac
我为我的Lua项目编写了C++ dll。Stackoverflow程序员乔希·帕内尔( Josh Parnell )非常热心地帮助我。他给了我一个密码,里面有luaL_len()。
但是我使用了一个在其中实现了Lua5.1.5的程序。在这个版本中缺少luaL_len()。
这是一个密码:
static int forLua_SumArray (lua_State* L) {
// Get the length of the table (same as # operator in Lua)
int n = luaL_len(L, 1);
double sum = 0.0;
我有一个c++主机,在其中我使用tolua++向Lua公开了一些类。其中一个类具有一个函数,该函数应该注册来自lua的回调。因此,当C++代码需要调用Lua注册函数时,它可以调用。然而,该函数是一个表/类函数。我以前用字符串函数名(不是lua“类”的一部分)成功地做到了这一点,但我很好奇是否能够以某种方式存储Lua函数而不是函数名。
我定义我的lua类如下:
MyClass = {}
function MyClass:Create()
local obj = {}
-- copy all functions from MyClass table to this local
我的问题是,haxe不想编译下面的代码片段到lua目标。它抱怨:Main.hx:7: characters 11-17 : String should be Int
import lua.Table;
class Main {
static public function my_test(): Table<String, Int>
{
var t: Table<String, Int> = Table.create();
t["test"] = 1; # Heres the problem
我正在创建一个助手,用于在C++类和Lua对象之间创建多个继承。因为Lua将C/C++用户对象存储为void *,所以在检索对象时很难进行安全的强制转换。
例如,
如果你有
class A { }
class B { }
class C : public A, public B { }
然后将一个C类型的对象传递给Lua,将C实例的地址传递给B,当您需要将它转换为B时,C++编译器将自动将指针对齐到B在C中的位置,因此直接将空*指针从C转换到B是不安全的。
为了避免这个问题,我使用了一种转换器。在Lua中,对象以字符串的形式包含它们的名称,因此当您需要将对象从类型转换为其他类型时,它将使用如下
我想我找到了答案,很快就会得到结果的
我得到了这个错误,不知道如何修复它,而不让方法是静态的。如果它们是静态的,我不会得到错误,但是我不能使用任何非静态变量或函数。另外,在您说int和lua_CFunction可能是不同的类型之前,它们不是。
typedef int (*lua_CFunction) (lua_State *L);
*
1 IntelliSense: argument of type "int (LuckyIrc::*)(lua_State *l)" is incompatible with parameter of type "lua_CFunct