姓名变量 Lua
2012-1-20 8:4:47
收藏:0
阅读:185
评论:3
我在 Lua 中有以下代码:
ABC:
test (X)
test 函数是用 C++ 实现的。我的问题是:我需要知道作为参数传递的变量名(在这种情况下是 X)。在 C++ 中只能访问这个变量的值,但我必须知道它的名字。
请帮忙
原文链接 https://stackoverflow.com/questions/8932852
点赞
stackoverflow用户221955
如果你想要参数的字符串表示形式,那么在 lua 中你就有点卡壳了。
我想到了 C 中的这种方式:
assert( x==y );
这会在失败时生成一个漂亮的消息。在 C 中,这是通过宏完成的。像这样(未经测试,可能破折号)。
#define assert(X) if(!(X)) { printf("ASSERION FAILED: %s\n", #X ); abort(); }
在这里,`#X``表示参数的字符串形式。在上面的示例中,它是“x == y”。请注意,这与变量名称略有不同——它只是解析器在展开宏时使用的字符串。
不幸的是,在 lua 中没有这样的相应功能。对于我的 lua 测试库,我最终是将字符串化版本作为表达式的一部分传递,因此在 lua 中我的代码看起来像这样:
assert( x==y, "x==y")
可能有一些方法可以使这个工作像assert(“x==y”)
使用某种字符串计算和闭包机制,但对我来说似乎太棘手了,不值得去做。
编辑:
尽管在纯 lua 中似乎不可能,但有一个补丁版本似乎支持宏:http://lua-users.org/wiki/LuaMacros。他们甚至有一个更好的“断言”的例子。
2012-01-20 08:53:30
stackoverflow用户596285
正确答案是 Lua 并不真正支持此功能,但有 debug 接口。查看 这个问题 获取您正在寻找的解决方案。如果您无法直接从 C++ 中调用 debug,请使用 Lua 函数包装函数调用,首先提取 debug 结果,然后调用您的 C++ 函数。
2012-01-20 12:59:38
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
功能不是传递变量;它们传递的是_值_。变量只是存储值的位置。
当您在 Lua 代码的某个地方说
X
时,那意味着从变量X
中获取_value_(注意:实际上比这更复杂,但我在这里不会深入讨论)。所以当您说
test(X)
时,您是在说:“从变量X
获取值,并将该值作为第一个参数传递给函数test
”。似乎您想要做的是更改
X
的内容,对吗?您想让test
函数以某种方式修改X
。嗯,在 Lua 中,您不能真正直接这样做。也不应该。你看,在 Lua 中,你可以从函数中返回值。而且你可以返回_多个_值。即使从 C++ 代码,你也可以返回多个值。因此,您想存储在
X
中的任何内容都可以返回:X = test(X)
这样,函数的_调用者_决定如何处理该值,而不是函数本身。如果调用者想要修改变量,那也可以。如果调用者想要将其粘贴到其他地方,那也可以。无论如何,您的功能都_不应该关心_。
此外,这使用户可以执行诸如
test(5)
之类的操作。这里没有变量;你只是直接传递一个_value_。这就是为什么函数无法修改传递的“变量”的原因之一;因为它不必是变量。只传递值,因此用户可以直接传递文字量值,而不是存储在变量中的值。简而言之:您无法这样做,也不应该这样做。