gpt4 book ai didi

c++ - 来自 C++ 的 lua 函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:25:03 25 4
gpt4 key购买 nike

让我们在“luafunc.lua”中有一段代码:

function foo(a, b)
return a + b
end

a = io.read('*n')
b = io.read('*n')
print (foo(a, b))

让我们尝试使用 C++ 文件中的函数 foo:

#include <iostream>

using namespace std;

extern "C"{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
};

int main()
{
lua_State *lvm = lua_open();
luaL_openlibs(lvm);
luaL_loadfile(lvm, "luafunc.lua");

int a, b;
cin >> a >> b;
lua_pcall(lvm, 0, LUA_MULTRET, 0);
lua_getglobal(lvm, "foo");
lua_pushnumber(lvm, a);
lua_pushnumber(lvm, b);
if (lua_pcall(lvm, 2, 1, 0))
{
cout << "Error: " << lua_tostring(lvm, -1) << endl;
return 0;
}

cout << "The result is: " << lua_tonumber(lvm, -1) << endl;

lua_close(lvm);
return 0;
}

所以,问题是这段 C++ 代码执行了整个 luafunc.lua。当然,我可以从 lua 文件中删除读取部分,然后从 C++ 中只执行 foo。但是,即使 lua 文件中还有其他内容,我是否可以使用 C++ 中的 foo 函数?

最佳答案

如果您需要能够在不运行该代码的情况下使用该功能,请将代码和功能分成两个单独的脚本,一个包含 foo 的脚本和一个加载该脚本的脚本和测试 foo

在包含函数的脚本执行之前,函数不会被定义。执行该脚本将定义 foo,然后也运行其他 3 行。

当您使用 loaL_loadfile 加载文件时(或任何其他加载调用)整个脚本变成了一个函数;要执行它,您必须使用 lua_pcall 调用该函数管他呢。在此之前,定义 foo 的脚本只是堆栈中未命名、未执行的代码块。

没有函数可以只执行脚本的一部分,或者只执行函数定义。

关于c++ - 来自 C++ 的 lua 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10453549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com