Lua函数调用字符串中的参数列表

时间:2012-10-13 02:20:40

标签: dynamic lua corona

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

为什么呢? 我有一个场景,一个函数可以接收任意数量的参数,它们不能作为列表发送(它在CoronaSDK中,所以我不能真正修改源,并且必须适应它)。所以,有时候我必须发送3个参数,有时候我会发送100个。还有这样做吗?

4 个答案:

答案 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

而且,这是codepad - oDmVZ209上的一个有效例子。

答案 3 :(得分:0)

我的第二个Nicol Bolas你可能正在尝试解决错误的问题,但如果你仍然想解析字符串并将其转换为参数列表,这里有一种方法({{1}在Corona环境中不可用;显然这不能处理任何类型的分层数据):

loadstring