我写了一个简单的图书馆:
#include "lua.h"
#include "lauxlib.h"
static int l_or(lua_State *l)
{
int i, result = 0;
int nargs = lua_gettop(l);
for(i = 1; i <= nargs; ++i)
{
result |= lua_tointeger(l, i);
}
lua_pushnumber(l, result);
return 1;
}
static const luaL_Reg mybit [] = {
{"or", l_or},
{NULL, NULL} /* sentinel */
};
int __declspec(dllexport) luaopen_mybit (lua_State *L)
{
luaL_newlibtable(L, mybit);
luaL_setfuncs(L, mybit,0);
return 1;
}编译成名为mylib.dll的DLL。
然后使用以下脚本使用独立的Lua解释器进行测试:
print ("Test script")
mybit = require("mybit")
print(mybit)
mybit.or(1,2,3)
--print(mybit.or)当我运行这个脚本时,我得到以下输出:
lua: test.lua:6: <name> expected near 'or'根据我看过的所有例子,这应该是完全没有问题的。如果我注释掉mybit.or(1,2,3),我得到
Test script
table: 005A8EB8所以我很有信心图书馆已经装好了。我的问题是,我不明白为什么我不能使用点运算符访问or函数。
我正在使用Lua5.2与明-gcc编译.
发布于 2013-10-01 14:01:58
or是Lua中的一个保留字(它是逻辑或运算符)。这就是为什么Lua中所有的按位操作库都将或-函数命名为类似于bor的原因。and和not也有类似的保留。(保留单词的完整列表可以找到这里。)
您仍然可以通过使用字符串来调用它:
print(mybit["or"](1,2,3))
print(mybit["or"])但是,最好学习现有的按位操作库的例子,并将其命名为or以外的其他东西。
发布于 2013-10-01 14:01:50
您正在使用or作为函数名,它是Lua中的关键字,请尝试另一个名称,如my_or。
https://stackoverflow.com/questions/19118176
复制相似问题