将C++函数转换成Lua函数
2012-5-5 11:50:29
收藏:0
阅读:89
评论:2
让我们有一个在"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吗?
原文链接 https://stackoverflow.com/questions/10453549
点赞
stackoverflow用户501459
我可以在 lua 文件里使用 C++ 函数 foo 吗?即使 lua 文件里还有其他代码?
可以。
但是如果没有执行 lua 文件中其他部分,你能否使用它呢? 不行。
Lua 函数是在运行时定义的。仅仅加载和编译脚本是不够的,你必须运行结果的 chunk 才能在 Lua 状态下定义函数 foo
。
2012-05-04 19:56:35
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
如果您需要能够独立运行该函数而不运行该代码,将代码和函数分成两个单独的脚本,一个脚本包含
foo
,另一个脚本加载该脚本并测试foo
。只有执行包含它的脚本后,函数才被定义。执行该脚本将定义
foo
,然后运行另外三行。当您使用loaL_loadfile(或任何其他加载调用)加载文件时,整个脚本将转换为一个函数。要执行它,您必须调用该函数,使用lua_pcall或其他方法。在那之前,定义 foo 的脚本只是一个未命名的未执行代码块。
没有函数可以执行脚本的部分内容,或仅执行函数定义。