C++ 名称变量Lua
我在Lua中有以下代码: ABC: 测试功能是用C++实现的。我的问题是:我需要知道作为参数传递的变量名是什么(在本例中是X)。在C++中,我只能访问这个变量的值,但我必须知道她的名字C++ 名称变量Lua,c++,variables,lua,C++,Variables,Lua,我在Lua中有以下代码: ABC: 测试功能是用C++实现的。我的问题是:我需要知道作为参数传递的变量名是什么(在本例中是X)。在C++中,我只能访问这个变量的值,但我必须知道她的名字 请帮助函数不是传递的变量;它们是传递的值。变量只是存储值的位置 当您在Lua代码中的某个地方说X时,这意味着要从变量X中获取值(注意:实际上比这更复杂,但我在这里不赘述) 因此,当您说test(X)时,您是说,“从变量X中获取值,并将该值作为第一个参数传递给函数test” 看起来您想要做的是更改X的内容,对吗?您
请帮助函数不是传递的变量;它们是传递的值。变量只是存储值的位置 当您在Lua代码中的某个地方说
X
时,这意味着要从变量X
中获取值(注意:实际上比这更复杂,但我在这里不赘述)
因此,当您说test(X)
时,您是说,“从变量X
中获取值,并将该值作为第一个参数传递给函数test
”
看起来您想要做的是更改X
的内容,对吗?您希望以某种方式修改test
函数X
。好吧,你不能直接在卢阿做到这一点。你也不应该
请参见,在Lua中,可以从函数返回值。您可以返回多个值。即使是C++代码,也可以返回多个值。因此,您想要存储在X
中的任何内容都可以返回:
X = test(X)
这样,函数的调用方决定如何处理值,而不是函数本身。如果调用者想要修改变量,那没关系。如果打电话的人想把它贴在别的地方,也可以。您的功能不应该以这种方式或其他方式关心
此外,这允许用户执行类似于test(5)
的操作。这里没有变量;您只需直接传递一个值。这就是函数无法修改传递的“变量”的原因之一;因为它不必是变量。只传递值,因此用户可以简单地传递文本值,而不是存储在变量中的值
简而言之:你不能这样做,你也不应该这样做。函数不是传递的变量;它们是传递的值。变量只是存储值的位置 当您在Lua代码中的某个地方说
X
时,这意味着要从变量X
中获取值(注意:实际上比这更复杂,但我在这里不赘述)
因此,当您说test(X)
时,您是说,“从变量X
中获取值,并将该值作为第一个参数传递给函数test
”
看起来您想要做的是更改X
的内容,对吗?您希望以某种方式修改test
函数X
。好吧,你不能直接在卢阿做到这一点。你也不应该
请参见,在Lua中,可以从函数返回值。您可以返回多个值。即使是C++代码,也可以返回多个值。因此,您想要存储在X
中的任何内容都可以返回:
X = test(X)
这样,函数的调用方决定如何处理值,而不是函数本身。如果调用者想要修改变量,那没关系。如果打电话的人想把它贴在别的地方,也可以。您的功能不应该以这种方式或其他方式关心
此外,这允许用户执行类似于test(5)
的操作。这里没有变量;您只需直接传递一个值。这就是函数无法修改传递的“变量”的原因之一;因为它不必是变量。只传递值,因此用户可以简单地传递文本值,而不是存储在变量中的值
简而言之:你不能这样做,你也不应该这样做。如果你想要的是参数的字符串表示,那么你就陷入了lua 我在想C中的一些东西:
assert( x==y );
这会在失败时生成一条很好的消息。在C语言中,这是通过宏实现的。
类似这样的(未经测试,可能已损坏)
这里的#X
表示参数的字符串形式。在上面的例子中,这是“x==y”。请注意,这与变量名略有不同——它只是在扩展宏时解析器中使用的字符串
不幸的是,lua中没有相应的功能。对于我的lua测试库,我最终将字符串化版本作为表达式的一部分传递,因此在lua中,我的代码如下所示:
assert( x==y, "x==y")
使用某种字符串求值和闭包机制,可以通过断言(“x==y”)来实现这一点,但对我来说,这似乎很难做到
编辑:
虽然这在纯lua中似乎不可能实现,但有一个补丁版本似乎确实支持宏:。他们甚至有一个更好的
断言的例子
如果你想要的是参数的字符串表示,那么你就有点陷入lua了
我在想C中的一些东西:
assert( x==y );
这会在失败时生成一条很好的消息。在C语言中,这是通过宏实现的。
类似这样的(未经测试,可能已损坏)
这里的#X
表示参数的字符串形式。在上面的例子中,这是“x==y”。请注意,这与变量名略有不同——它只是在扩展宏时解析器中使用的字符串
不幸的是,lua中没有相应的功能。对于我的lua测试库,我最终将字符串化版本作为表达式的一部分传递,因此在lua中,我的代码如下所示:
assert( x==y, "x==y")
使用某种字符串求值和闭包机制,可以通过断言(“x==y”)来实现这一点,但对我来说,这似乎很难做到
编辑:
虽然这在纯lua中似乎不可能实现,但有一个补丁版本似乎确实支持宏:。他们甚至有一个更好的
断言的例子。正确的答案是Lua并不真正支持这个,但是有调试接口。请参阅以了解您正在寻找的解决方案。如果y