【问题标题】:How to concatenate strings and numbers and prevent Lua from converting the result into a string?如何连接字符串和数字并防止Lua将结果转换为字符串?
【发布时间】:2019-01-23 06:47:32
【问题描述】:

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

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

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

希望你能帮助我。谢谢。

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

--Want this:
valueMessage = ap[4]

【问题讨论】:

  • 谢谢@EgorSkriptunoff 这正是我想要的。你太棒了!

标签: lua


【解决方案1】:

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

例子:

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

print(get_valueMessage())

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

该表需要是全局的,加载字符串函数才能访问它。

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

【讨论】:

  • 那不行,因为ap是本地的,编译后的chunk不能访问。
  • 啊,当我在 ide 中没有本地的情况下测试过它。编辑答案以反映这一点。
【解决方案2】:
name="ap"; idx=4; value=_G[name][idx]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2013-02-03
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多