在LUA中是否可以执行类似foo的函数(“param1,param2,param3,param4”),并将其检测为foo(param2,param2,param3,param4)
为什么呢? 我有一个场景,一个函数可以接收任意数量的参数,它们不能作为列表发送(它在CoronaSDK中,所以我不能真正修改源,并且必须适应它)。所以,有时候我必须发送3个参数,有时候我会发送100个。还有这样做吗?
答案 0 :(得分:2)
您可以使用任意数量的参数调用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,但loadtring函数往往有点慢。尽可能避免使用它。
答案 1 :(得分:2)
它们不能作为列表发送(它在CoronaSDK中,因此我无法真正修改源代码,并且必须适应它)
当然可以。观看:
function CallWithParametersInAList(FunctionToCall, paramsInList)
return FunctionToCall(unpack(paramsInList))
end
请参阅? paramsInList
中的每个数组元素都将解压缩为FunctionToCall
的参数。此外,将返回FunctionToCall
的每个返回值。
答案 2 :(得分:0)
在我看来,最好的方法之一(和我使用的方法)是这样的:
function Call( ... )
-- All passed arguments are stored in a default table named arg
table.foreach( arg, print )
end
答案 3 :(得分:0)
我的第二个Nicol Bolas你可能正在尝试解决错误的问题,但如果你仍然想解析字符串并将其转换为参数列表,这里有一种方法({{1}在Corona环境中不可用;显然这不能处理任何类型的分层数据):
loadstring