如何连接字符串和数字并防止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]