Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何连接字符串和数字并防止Lua将结果转换为字符串?_Lua - Fatal编程技术网

如何连接字符串和数字并防止Lua将结果转换为字符串?

如何连接字符串和数字并防止Lua将结果转换为字符串?,lua,Lua,总而言之,每当程序通过套接字通信接收到消息ap[4]时,我试图访问名为ap的数组(表)的第四个元素 为了实现这一点,程序在消息到达后调用一个函数,该函数“接受”字符4,并将其转换为数字 到目前为止,一切都很完美,但当我尝试在ap[和]之间再次连接4数字时,Lua再次将一切转换为字符串。我知道这是Lua的典型行为,但我真的找不到解决这个问题的方法 希望你能帮助我。谢谢 --Have this: message = "ap[4]" --Want this: valueMessage = ap[4]

总而言之,每当程序通过套接字通信接收到消息
ap[4]
时,我试图访问名为
ap
的数组(表)的第四个元素

为了实现这一点,程序在消息到达后调用一个函数,该函数“接受”字符
4
,并将其转换为数字

到目前为止,一切都很完美,但当我尝试在
ap[
]
之间再次连接
4
数字时,Lua再次将一切转换为字符串。我知道这是Lua的典型行为,但我真的找不到解决这个问题的方法

希望你能帮助我。谢谢

--Have this:
message = "ap[4]"

--Want this:
valueMessage = ap[4]

您可以使用
loadstring
来执行它,而不是将
ap[4]
转换为数字

例如:

ap = {[4] = 'Hello World'}
message = "ap[4]"
get_valueMessage = loadstring("return " .. message)

print(get_valueMessage())
此方法在处理深度可变的表时提供了灵活性。 如果您使用具有一致深度的表,Egor Skriptunoff的答案是更好的解决方案

该表需要是全局的,loadstring函数才能访问它


关于此方法,需要记住的是,在执行消息时,它还为恶意代码提供了注入路径。如果消息包含表索引以外的内容,例如函数调用,则可以利用它。添加到消息中的
返回
确实减轻了一些恶作剧。

谢谢@EgorSkriptunoff这正是我想要的。你真棒!这不起作用,因为
ap
是本地的,编译后的块无法访问它。啊,当我在ide中没有本地块的情况下测试了它。编辑的答案反映了这一点。
name="ap"; idx=4; value=_G[name][idx]