【问题标题】:Lua function return string with C++Lua函数用C++返回字符串
【发布时间】:2011-03-08 02:24:11
【问题描述】:

是否可以通过 C++ 向 Lua 添加一个返回字符串的函数? -编辑- 好的,这段代码行不通。有什么帮助吗?

int flua_getinput(lua_State *L){
    if(lua_isstring(L,1)){
        cout << lua_tostring(L,1);
        cin >> input;
        cout << "\n";
        lua_pushstring(L,input);
    }else{
        cin >> input;
        cout << "\n";
        lua_pushstring(L,input);
    }
    return 1;
}
Registering Function:

lua_register(L,"getinput",flua_getinput);

【问题讨论】:

  • 是的,有可能。如果您想要更多答案,则必须提供更多背景信息:您尝试过什么,为什么它似乎不起作用?
  • 我不能只举一个例子来说明如何做到这一点?我只是想学习 C++ 和 Lua。我不知道从什么开始。
  • Lua 错误:lua: [string "init.lua"]:1: 尝试调用全局 'getinput' (一个 nil 值)

标签: c++ string function lua


【解决方案1】:

您是否正在尝试做这样的事情?

int lua_input(lua_State* L) {
    string input;
    cin >> input;
    lua_pushstring(L, input.c_str());
    return 1;
}

int main() {
    lua_State* L=lua_open();
    luaL_openlibs(L);
    lua_register(L,"input",lua_input);
    luaL_loadstring(L, "for i=1,4 do print('you typed '..input()); end");
    lua_pcall(L, 0, 0, 0);
}

【讨论】:

  • +1 我认为 OP 需要完整的代码。致 OP:如果您接受此操作,您必须还始终检查对 loadstring 或 pcall 的每个调用。最后使用 lua_close。
  • @kaizer - 你是对的。我只是想让它尽可能简单。
【解决方案2】:

你检查过Programming in Lua吗?

【讨论】:

    【解决方案3】:

    This page 展示了如何从中获取 char*。

    【讨论】:

      【解决方案4】:

      最简单的方法是使用 luabind。它会自动检测并处理 std::string,因此您可以简单地使用 std::string f() 之类的函数并将其绑定到 lua,当 lua 脚本调用它时,它会自动转换为本机 lua 字符串.

      【讨论】:

        【解决方案5】:

        如果您收到错误attempt to call global 'getinput' (a nil value),那么问题是没有命中 lua_register 调用。 getinput 函数必须通过调用注册函数来加载,如果它在库中,则使用 require。

        【讨论】:

          猜你喜欢
          • 2017-10-25
          • 2021-06-10
          • 1970-01-01
          • 2014-11-06
          • 1970-01-01
          • 2013-10-30
          相关资源
          最近更新 更多