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

总之,我正在尝试的是每当程序通过套接字通信接收到消息 ap[4] 时,都能够访问名为 ap 的数组(表)的第四个元素。

为了实现这一点,程序一旦收到消息,就调用一个函数将字符 4 "转换" 为数字。

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

希望你们能帮帮我。谢谢。

--现在是这样的:
message = "ap[4]"

--我想要这样的:
valueMessage = ap[4]
点赞
用户7396148
用户7396148

将下面翻译成中文并且保留原本的 markdown 格式

与其将 ap[4] 转换为数字,你可以使用 loadstring 来执行它。

例如:

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

print(get_valueMessage())

这种方法在处理深度不固定的表格时非常灵活。如果你要处理的是深度一致的表格,Egor Skriptunoff 的答案是一个更好的解决方案。

为了让 loadstring 函数能够访问到表格,该表格需要是全局变量。

需要注意的是,这种方法也为恶意代码提供了注入路径,因为它会执行输入的信息。如果这个信息中包含函数调用之类的内容,就可能被攻击者利用。在信息中加入 return 命令可以减轻某些险恶行为。

2019-01-23 16:38:24
用户734069
用户734069
name="ap"; idx=4; value=_G[name][idx]

将上述代码翻译成中文如下:

name="ap"; idx=4; value=_G[name][idx]

其中 name 变量的值为 "ap"idx 变量的值为 4value 变量的值为 _G[name][idx]

2019-01-23 20:47:43