3

LUA で foo("param1, param2, param3, param4") のような関数を実行し、それを foo(param2, param2, param3, param4) として検出することは可能ですか?

なんで?関数が必要な数のパラメーターを受け取ることができ、リストとして送信できないシナリオがあります (CoronaSDK にあるため、ソースを実際に変更することはできず、それに適応する必要があります)。そのため、3 つのパラメーターを送信する必要がある場合もあれば、100 を送信する場合もあります。これを行う方法はありますか?

4

4 に答える 4

4

リストとして送信することはできません (CoronaSDK にあるため、ソースを実際に変更することはできず、それに適応する必要があります)

確かにそれはできます。時計:

function CallWithParametersInAList(FunctionToCall, paramsInList)
  return FunctionToCall(unpack(paramsInList))
end

見る?のすべての配列要素は、paramsInListへの引数にアンパックされますFunctionToCall。また、からのすべての戻り値FunctionToCallが返されます。

見る

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

CallWithParametersInAList(test,{33333});

出力

this is lua test function.33333
于 2012-10-13T04:02:55.037 に答える
3

必要な数のパラメーターを指定して 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関数は少し遅くなる傾向があります。可能であれば避けるようにしてください。

于 2012-10-13T02:35:43.617 に答える
0

おそらく間違った問題を解決しようとしているニコル・ボーラスに感謝しますが、それでも文字列を解析してパラメーターのリストに変換したい場合は、これを行う 1 つの方法を次に示します (loadstringはコロナ環境では使用できません。明らかに、これはどのタイプの階層データも処理しません):

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"))
于 2012-10-13T05:52:17.723 に答える
0

私の意見(および私が使用する方法)では、最良の方法の1つは次のようなものです。

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

そして、これはコードパッドの実際の例です- oDmVZ209

于 2012-10-13T04:20:01.413 に答える