Dynamic Lua函数调用,参数列表为字符串

Dynamic Lua函数调用,参数列表为字符串,dynamic,lua,coronasdk,Dynamic,Lua,Coronasdk,在LUA中是否可以执行类似foo的函数(“param1,param2,param3,param4”),并让它将其检测为foo(param2,param2,param3,param4) 为什么?? 我有一个场景,在这个场景中,一个函数可以接收任意多的参数,而它们不能作为列表发送(它在CoronasSDK中,所以我不能真正修改源代码,必须适应它)。所以,有时我必须发送3个参数,而有时我将发送100个。是否有这样做的方法?您可以使用任意多的参数调用lua函数。如果函数需要更多参数,它们将被设置为nil

在LUA中是否可以执行类似foo的函数(“param1,param2,param3,param4”),并让它将其检测为foo(param2,param2,param3,param4)

为什么??
我有一个场景,在这个场景中,一个函数可以接收任意多的参数,而它们不能作为列表发送(它在CoronasSDK中,所以我不能真正修改源代码,必须适应它)。所以,有时我必须发送3个参数,而有时我将发送100个。是否有这样做的方法?

您可以使用任意多的参数调用lua函数。如果函数需要更多参数,它们将被设置为nil。如果函数需要的参数太少,则发送的额外参数将被忽略

例如:

功能f(a、b、c)
印刷品(a、b、c)
结束
f(1,2)--打印:12无
f(1,2,3)--打印:1 2 3
f(1,2,3,4,5)--打印:1,2,3
编辑:

如果必须从字符串中获取参数,并且这些参数包括表和函数之类的内容,那么除了通过loadstring函数解析字符串之外,您没有什么选择:

--s包含参数
s='1,2,{1,2,3}'
--f是要调用的函数
loadstring('f('s..'))()--打印:12表:0061D2E8
我不确定CoronalSDK,但是loadstring函数的速度有点慢。如果可能的话,尽量避免

它们不能作为列表发送(它在CoronaSDK中,所以我不能真正修改源代码,必须适应它)

当然可以。观察:

function CallWithParametersInAList(FunctionToCall, paramsInList)
  return FunctionToCall(unpack(paramsInList))
end
看到了吗?
paramsInList
中的每个数组元素都将被解压为
FunctionToCall
的参数。此外,将返回
function到call
的每个返回值

function test(a)
    print("this is lua test function."..a);
end

CallWithParametersInAList(test,{33333});

输出

this is lua test function.33333

在我看来(也是我使用的)最好的方法之一是这样的:

function Call( ... )
    -- All passed arguments are stored in a default table named arg
    table.foreach( arg, print )
end

这里有一个关于-,的工作示例。

我建议Nicol Bolas,您可能试图解决错误的问题,但是如果您仍然想解析字符串并将其转换为参数列表,这里有一种方法(
loadstring
在Corona环境中不可用;显然这不处理任何类型的层次结构数据):


OP希望将字符串转换为参数列表。@lhf:这是一个XY问题;他试图以错误的方式解决实际问题(使用任意参数调用函数)。这是Lua 5.0语法,在Lua 5.1中已弃用,在Lua 5.2中已删除(都涉及
arg
table
table.foreach
function)。
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"))