重定向/重新定义嵌入式Lua中的print()函数。
2010-12-22 10:15:50
收藏:0
阅读:301
评论:5
我在我的 C++ 应用程序中嵌入了 Lua。我想要重定向 print 语句(或者可能只是重新定义 print 函数?),这样我就可以将计算得到的表达式显示在其他地方。
最佳的方法是什么:重定向还是重新定义 print() 函数?
如果有任何演示如何完成此操作的代码片段/指针,将不胜感激。
原文链接 https://stackoverflow.com/questions/4508119
点赞
stackoverflow用户107090
编写你自己的 C 或 Lua 函数并重新定义 print
。
2010-12-22 10:45:34
stackoverflow用户298661
你可以通过 Lua 脚本简单地重新定义 print
。
local oldprint = print
print = function(...)
oldprint("In ur print!");
oldprint(...);
end
2010-12-22 14:15:39
stackoverflow用户83497
你可以在 C 中重新定义 print 语句:
static int l_my_print(lua_State* L) {
int nargs = lua_gettop(L);
for (int i=1; i <= nargs; i++) {
if (lua_isstring(L, i)) {
/* 弹出下一个参数并使用 lua_tostring(L, i) 进行打印 */
}
else {
/* 如果需要,可以对非字符串参数做一些操作 */
}
}
return 0;
}
然后在全局表中注册它:
static const struct luaL_Reg printlib [] = {
{"print", l_my_print},
{NULL, NULL} /* 数组末尾 */
};
extern "C" int luaopen_luamylib(lua_State *L)
{
lua_getglobal(L, "_G");
// luaL_register(L, NULL, printlib); // 适用于 Lua 版本 < 5.2
luaL_setfuncs(L, printlib, 0); // 适用于 Lua 版本 5.2 或更高版本
lua_pop(L, 1);
}
由于你在使用 C++,因此需要使用 extern "C"
引用你的文件。
2010-12-22 22:12:17
stackoverflow用户774082
你可以重新定义下面的宏:
lua_writestring
lua_writeline
lua_writestringerror
按你喜欢的方式重新定义它们。 我不确定这是在哪个Lua版本中引入的,但在5.3版本中可以使用。
请查看您的lauxlib.h或luaconf.h文件。
2016-10-13 15:34:54
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
请参阅
lbaselib.c
中的luaB_print
函数。那里的注释如下:/* 如果需要,您可以定义自己的 'print' 函数,按照这个模型但是更改 `fputs` 来将字符串放置在适当的地方(例如控制台窗口或日志文件)。*/
您可以编辑该函数或定义一个新函数。这样做的好处是简单且便携,但它不会处理
io.write
(您可能关心或不关心)。重定向 IO 不会是平台具体的(例如在 Windows 中的
SetStdHandle
),但会处理print
和io.write
,而不必重新定义它们。