【问题标题】:Lua array as parameter with nullLua数组作为带有null的参数
【发布时间】:2015-05-28 22:47:20
【问题描述】:

我有一个问题,我需要使用从 web 服务获取的可变参数调用一个函数...例如:

我有一个函数:

function MyPrint(param1, param2)
   print(param1, param2)
end

我将此函数保存在回调数组中:

callback[1] = MyPrint

我从服务器获取参数:

params = "[2, 88]" --> JSON from server

我愿意:

params = json.decode(params)
-- so 
-- params[1] = 2
-- params[2] = 88

我尝试将此参数传递给我的回调:

pcall(callback[1], unpack(params))

我在 MyPrint 功能上获得了 288...

但是如果服务器发送"[null, 88]",我在两个值上都得到nil...我读过unpack 函数有空值问题...但是...我怎么能调用callback[1]有一些null 值?

有没有办法直接将参数数组传递给函数而不需要解包?

编辑:我创建了 MyPrint 作为示例...但实际上我不知道有多少参数需要回调函数,我只有一个函数列表,并且需要使用我得到的可变数量的参数来调用它们来自服务器。

【问题讨论】:

  • pastebin.com/10UuPc6j -- 在这里工作。你的lua版本是什么?开箱前params的值是多少?另见here
  • json.decode 应该在返回的表中创建附加字段n 以存储参数的数量。那么your_function(unpack(params,1,params.n))就可以解决问题了。
  • @EgorSkriptunoff 没有“n”字段...print(params.n) --> nil
  • @diego 似乎问题出在json.decode 上,忽略了 null 参数,这就是您的示例有效的原因......它直接传递 null 而无需使用 json.decode 解析 null
  • 如果您不能让json.decode 创建n 字段或等效字段,那么就会丢失数据。在不知道有多少元素的情况下,您无法很好地处理 json 对象。要继续前进,您必须找到一种方法来保留元素的数量。

标签: lua


【解决方案1】:

如果表有间隙,您应该明确指定要解包的索引范围:table.unpack(params, 1, table.maxn(params))。这在 lua 5.1.5 中运行良好。

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 2015-07-19
    • 2017-04-28
    • 2012-06-28
    • 2012-12-16
    • 2017-04-22
    • 2018-12-15
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多