これはWoW(World of Warcraft)のluaスクリプトに関する質問です。これらの多くはここで尋ねられることはありませんが、私はどこに向けるべきではなく、Stackoverflowは答えのためのプログラマーのオアシスです。PCALLとは何か、あるいはWowwikiが間違っていますか?
質問:
Wowwikiは、第二、第三、第四引数はあなたの呼び出し元の関数の第一、第二、第三引数であることを述べています。私はこれが本当であるとは思わない。私は第3、第4、第5の議論が第1、第2、第3の議論に終わることがわかります。
リンク:http://www.wowwiki.com/API_pcall
機能:
function myTest(arg1)
return arg1 .. 10;
end
問題:
local retOK, ret1 = pcall(myTest,"string value");
私はサンプルを試してみたときに、私は(「ローカル 'arg1に' 上CONCATENATEを実行しようとしているのエラーが出ますnil値)を返します。コードを次のように変更した場合:
local retOK, ret1 = pcall(myTest,"string value", "bob");
出力が「bob10」になります。 2番目の議論はどこに行き、それは何のためですか?
より多くのテスト:
function BobsToolbox:RunTest()
local test1, value1 = pcall(BobsToolbox.Test1, "string value");
SharpDeck:Print("Test1: " .. tostring(test1) .. " Value: " .. tostring(value1));
end
function BobsToolbox:Test1(arg1)
return arg1 .. "10";
end
結果:ローカル 'ARG1'(ゼロ値)を連結するための試み
function BobsToolbox:RunTest()
local test1, value1 = pcall(Test1, "string value");
SharpDeck:Print("Test1: " .. tostring(test1) .. " Value: " .. tostring(value1));
end
function Test1(arg1)
return arg1 .. "10";
end
結果:文字列value10
私はLUAに新しいですなぜこれらが違うのか理解できません。
新しい質問:
次のコードは動作しますが、なぜですか? ( ":" 対 "":)次の違いは何
function BobsToolbox:RunTest()
local test1, value1 = pcall(BobsToolbox.Test1, "string value");
SharpDeck:Print("Test1: " .. tostring(test1) .. " Value: " .. tostring(value1));
end
function BobsToolbox.Test1(arg1)
return arg1 .. "10";
end
- 機能BobsToolbox.Test1(引数1)
- 機能BobsToolbox:Test1を(ARG1)
はい、答えを見つけたようです。 BobsToolbox:Test1(arg1)関数を作成すると、pcallを使用している関数名の後の最初の引数が操作対象のオブジェクトであると想定されます。それ以降の引数は、実際に使用したい引数です。 – Venesectrix
はい、これは正しいと思われます。 – AKX