C++ 名称变量Lua

C++ 名称变量Lua,c++,variables,lua,C++,Variables,Lua,我在Lua中有以下代码: ABC: 测试功能是用C++实现的。我的问题是:我需要知道作为参数传递的变量名是什么(在本例中是X)。在C++中,我只能访问这个变量的值,但我必须知道她的名字 请帮助函数不是传递的变量;它们是传递的值。变量只是存储值的位置 当您在Lua代码中的某个地方说X时,这意味着要从变量X中获取值(注意:实际上比这更复杂,但我在这里不赘述) 因此,当您说test(X)时,您是说,“从变量X中获取值,并将该值作为第一个参数传递给函数test” 看起来您想要做的是更改X的内容,对吗?您

我在Lua中有以下代码: ABC:

测试功能是用C++实现的。我的问题是:我需要知道作为参数传递的变量名是什么(在本例中是X)。在C++中,我只能访问这个变量的值,但我必须知道她的名字


请帮助

函数不是传递的变量;它们是传递的值。变量只是存储值的位置

当您在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