【问题标题】:Calling a c function from lua 5.2 generates a syntax error从 lua 5.2 调用 c 函数会产生语法错误
【发布时间】:2013-08-08 06:39:45
【问题描述】:

我一直在尝试让 lua 脚本为我正在开发的一个小游戏工作,但 lua 似乎比它的价值更麻烦。经过多次谷歌搜索和头发撕裂,我设法让简单的脚本运行,但很快就碰壁了。 C 函数似乎不想绑定到 lua,或者至少不想在绑定后运行。 g++ 编译 c 代码没有意外,但 lua 解释器生成此语法错误:

LUA ERROR: bin/lua/main.lua:1: syntax error near 'getVersion'

我的 C(++) 代码:

#include <lua.hpp>

static const luaL_Reg lualibs[] = 
{
    {"base", luaopen_base},
    {"io", luaopen_io},
    {NULL, NULL}
};

void initLua(lua_State* state);
int getVersion(lua_State* state);

int main(int argc, char* argv[])
{
    lua_State* state = luaL_newstate();
    initLua(state);

    lua_register(state, "getVersion", getVersion);

    int status = luaL_loadfile(state, "bin/lua/main.lua");
    if(status == LUA_OK){
        lua_pcall(state, 0, LUA_MULTRET, 0);
    }else{
        fprintf(stderr, "LUA ERROR: %s\n", lua_tostring(state, -1));
        lua_close(state);
        return -1;
    }

    lua_close(state);
    return 0;
}

void initLua(lua_State* state)
{
    const luaL_Reg* lib = lualibs;
    for (; lib->func != NULL; lib ++)
    {
        luaL_requiref(state, lib->name, lib->func, 1);
        lua_settop(state, 0);
    };
    delete lib;
}
int getVersion(lua_State* state)
{
    lua_pushnumber(state, 1);
    return 1;
};

Lua 代码:

print getVersion()

【问题讨论】:

  • print(getVersion())
  • @H2CO3:我相信这就是答案;你应该发布它。 (不,我不是在跟踪你!)
  • @KeithThompson 我刚刚做了 :)
  • @KeithThompson 你知道有什么好笑的吗?我不会说Lua。我通过尝试一些常识(约 5 秒)找到了答案,然后通过谷歌搜索“lua 函数字符串括号”找到了准确的解释,它在官方文档中(第 4 次点击,约 1 分钟)。

标签: c++ c lua


【解决方案1】:

print 是一个函数。由于它的参数既不是表构造函数也不是字符串字面量,因此您必须使用() 调用它:

print(getVersion())

Read the funny manual here.

【讨论】:

  • 哇,我已经为此苦苦挣扎了好几个小时,假设这是我在 c 代码中的错……这仍然是我的错,只是使用了糟糕的 lua 代码。编辑:还不能将此标记为答案,但我会这样做。
  • @DelishusCake this - Google,第 4 次点击 :)
猜你喜欢
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多