首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua5.2不能访问C库中的函数

Lua5.2不能访问C库中的函数
EN

Stack Overflow用户
提问于 2013-10-01 13:58:33
回答 2查看 184关注 0票数 2

我写了一个简单的图书馆:

代码语言:javascript
复制
#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解释器进行测试:

代码语言:javascript
复制
print ("Test script")

mybit = require("mybit")
print(mybit)

mybit.or(1,2,3)
--print(mybit.or)

当我运行这个脚本时,我得到以下输出:

代码语言:javascript
复制
lua: test.lua:6: <name> expected near 'or'

根据我看过的所有例子,这应该是完全没有问题的。如果我注释掉mybit.or(1,2,3),我得到

代码语言:javascript
复制
Test script
table: 005A8EB8

所以我很有信心图书馆已经装好了。我的问题是,我不明白为什么我不能使用点运算符访问or函数。

我正在使用Lua5.2与明-gcc编译.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-01 14:01:58

or是Lua中的一个保留字(它是逻辑或运算符)。这就是为什么Lua中所有的按位操作库都将或-函数命名为类似于bor的原因。andnot也有类似的保留。(保留单词的完整列表可以找到这里。)

您仍然可以通过使用字符串来调用它:

代码语言:javascript
复制
print(mybit["or"](1,2,3))
print(mybit["or"])

但是,最好学习现有的按位操作库的例子,并将其命名为or以外的其他东西。

票数 6
EN

Stack Overflow用户

发布于 2013-10-01 14:01:50

您正在使用or作为函数名,它是Lua中的关键字,请尝试另一个名称,如my_or

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19118176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档