2015-05-28 17 views
0

我有一個問題,我要打電話與我從web服務獲得可變參數的函數...參數,以便例如:Lua的數組與空

我有一個函數:

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)) 

288上MyPrint功能...

但是,如果服務器發送"[null, 88]",我得到了nil這兩個值...我認爲unpack函數有空值的問題...但隨後...我怎樣才能撥打callback[1]與一些null值?

有沒有辦法將參數數組直接傳遞給函數而不解壓縮?

編輯:我創建了MyPrint作爲一個例子......但我真的不知道有多少參數需要回調函數,我只有一個函數列表,我需要用可變數量的參數調用它們,從服務器獲得。

+0

http://pastebin.com/10UuPc6j - 在這裏工作。你的lua版本是什麼?拆包前「params」的價值是什麼?另外,請參閱[這裏](http://stackoverflow.com/questions/1672985/lua-unpack-bug) – Diego

+1

'json.decode'應該在返回的表中創建額外的字段'n'來存儲參數的數量。然後'your_function(解包(params,1,params.n))'將解決問題。 –

+0

@EgorSkriptunoff沒有「n」字段...... print(params.n)' - > nil – Pipe

回答

1

如果一個表有間隙,你應該明確指定一個索引範圍來解包:table.unpack(params, 1, table.maxn(params))。這在lua 5.1.5中運行良好。