2017-07-20 1 views
1

私はこれがどうして起こっているのか分かりません。 私はアプリケーションでLUAスクリプトを実行するためにMoonsharpを使用しています。私はLUA関数を作成しました(v、...)ので、...パラメータを繰り返し使用したいと思います。 '次へ' をムーンシャープペア(...)は、例外「悪い引数#1を次の(テーブルが期待され、文字列を取得しました)」に変換します。 "

"MoonSharp.Interpreter.ScriptRuntimeException" 悪い引数#1(表が期待される、文字列を得た)

IN('param1', 'param2', 'param1') -- expected it to return true 
function IN(v, ...) 
    local args = ... 
    local res = true 
    for i, v in pairs(args) do 
     if valueIn == v then 
      res = true 
      break 
     end 
    end 
    return res 
end 

それは、私はfolowing例外を受け取る呼び出された場合

だから、私の...変数にテーブルの代わりに文字列があるかどうかをチェックすることにしました。

function args(v, ...) 
    return ... 
end 

C#で戻り値が「PARAM2」と「PARAM1」との2つの値のタプルであり、それはペアまたはipairsで動作する必要があり、それはいけませんか?

ありがとうございます。あなたの例のように、この定義を使用して

+5

'pairs'はテーブル上で動作します。おそらく、' local args = {...} 'を意味します。 – Adam

答えて

4

function test(...) 
    local arg = ... 
end 

test(1,2,3) 

の呼び出しはもちろんのみ引数に1を代入

local arg = 1, 2, 3 

になります。残りは省略されています。

しかし、テーブルのコンストラクタとしてあなたが

local arg = {...}を書いたりして、楽しく、新しいテーブルの引数を反復する入力として...を取ります。 ...はちょうどあなたに語ったように、テーブルではありません。したがって、繰り返しはできません...

また、ローカルarg = table.pack(...)も動作します。

可変引数システムは、ケースであなたは興味が、Luaの5.1に変更された可変引数式に余分な引数を持つテーブル で疑似引数argから変更 https://www.lua.org/manual/5.1/manual.html#7.1

可変引数システム。 (luaconf.hでコンパイル時に オプションLUA_COMPAT_VARARGを参照してください。)

あなたがそう

function test(...) 

    for k,v in pairs(arg) do 
    print("I'm a generic for loop yeah!!!") 
    end 

end 

ような何かを行うことができBefor local arg = {...}が必要ではなかったです。

+0

ポイントを完全に理解するためです。どのような種類のオブジェクトは...それがテーブルでなければ、それ自体ですか? –

+1

@georgpoweleit値のリストを評価する式です。複数の値を返す関数呼び出しに似ています。多分、これは読む価値があります:http://lua-users.org/wiki/VarargTheSecondClassCitizen – Piglet

関連する問題