【发布时间】: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 功能上获得了 2 和 88...
但是如果服务器发送"[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