在LUA中是否可以执行类似foo(“ param1,param2,param3,param4”)的功能,并将其检测为foo(param2,param2,param3,param4)
为什么?我遇到的情况是,一个函数可以接收所需数量的参数,而不能将它们作为列表发送(它在CoronaSDK中,因此我不能真正修改源代码,而必须适应它)。因此,有时我必须发送3个参数,而有时我将发送100个参数。无论如何,这样做吗?
它们不能作为列表发送(它在CoronaSDK中,所以我不能真正修改源代码,而必须适应它)
当然可以。观看:
function CallWithParametersInAList(FunctionToCall, paramsInList)
return FunctionToCall(unpack(paramsInList))
end
看到了吗? paramsInList
中的每个数组元素都将解压缩为FunctionToCall
的参数。同样,将返回FunctionToCall
中的每个返回值。
see
function test(a)
print("this is lua test function."..a);
end
CallWithParametersInAList(test,{33333});
输出
this is lua test function.33333
您可以使用任意数量的参数调用lua函数。如果函数需要更多参数,则将它们设置为nil。如果函数期望的参数太少,则发送的多余参数将被忽略。
例如:
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函数往往会比较慢。如果可能,请尽量避免。
我第二次是Nicol Bolas,您可能正在尝试解决错误的问题,但是如果您仍然想解析字符串并将其转换为参数列表,这是执行此操作的一种方法(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"))