LUA中可能執行像foo(「param1,param2,param3,param4」)這樣的函數,並將其檢測爲foo(param2,param2,param3,param4 )帶參數列表的字符串中的Lua函數調用
爲什麼? 我有一個場景,其中一個函數可以接收儘可能多的參數,並且它們不能作爲列表發送(它在CoronaSDK中,所以我不能真正修改源代碼,並且必須適應它)。所以,有時我需要發送3個參數,有時我會發送100個。有沒有這樣做?
LUA中可能執行像foo(「param1,param2,param3,param4」)這樣的函數,並將其檢測爲foo(param2,param2,param3,param4 )帶參數列表的字符串中的Lua函數調用
爲什麼? 我有一個場景,其中一個函數可以接收儘可能多的參數,並且它們不能作爲列表發送(它在CoronaSDK中,所以我不能真正修改源代碼,並且必須適應它)。所以,有時我需要發送3個參數,有時我會發送100個。有沒有這樣做?
您可以根據需要調用具有多個參數的lua函數。如果函數需要更多參數,它們將被設置爲零。如果函數期望的參數太少,則發送的額外參數將被忽略。
例如:
function f(a, b, c)
print(a, b, c)
end
f(1, 2) -- prints: 1 2 nil
f(1, 2, 3) -- prints: 1 2 3
f(1, 2, 3, 4, 5) -- prints: 1 2 3
編輯:
如果你必須從一個字符串參數,這些參數包括像表和函數,你別無選擇,只能得到字符串被解析loadstring函數:
-- s contains the parameters
s = '1,2,{1,2,3}'
-- f is the function you want to call
loadstring('f(' .. s .. ')')() -- prints: 1 2 table: 0061D2E8
我不確定CoronaSDK,但loadstring函數往往有點慢。儘可能避免它。
他們不能被作爲一個列表(它在CoronaSDK,所以我真的不能修改源,並有去適應它)
當然可以。手錶:
function CallWithParametersInAList(FunctionToCall, paramsInList)
return FunctionToCall(unpack(paramsInList))
end
請參閱? paramsInList
中的每個數組元素都將被解壓到FunctionToCall
的參數中。此外,將返回FunctionToCall
的每個返回值。
我想第二個尼科爾布拉斯,你可能試圖解決錯誤的問題,但如果你仍然想解析字符串,並將其變成一個參數列表,這裏有一種方法可以做到這一點(loadstring
不是在Corona環境中可用;顯然這不能處理任何類型的分層數據):
function str2list(s)
local parms = {}
for p in s:gmatch("([^,]+),?") do table.insert(parms, p) end
return unpack(parms)
end
print(str2list("param1, param2, param3, param4"))
OP想要將*字符串*轉換爲參數列表。 – lhf
@lhf:這是一個XY問題;他試圖用錯誤的方式解決實際問題(用任意參數調用一個函數)。 –