Это вопрос сценария WoW (World of Warcraft). Не многие из них задаются здесь, но у меня нет места для поворота, а Stackoverflow - это программный оазис для ответов.Что такое PCALL или Wowwiki неправильно?
Вопрос:
Wowwiki утверждает, что 2-й, 3-й, 4-й аргументы ваши вызова функции 1-й, 2-й, 3-й аргументы. Я не считаю это правдой. Я считаю, что 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' (значение nil) ». Если я изменю код на:
local retOK, ret1 = pcall(myTest,"string value", "bob");
затем я получаю вывод «bob10». Куда идет второй аргумент и для чего он нужен?
Больше Тестирование:
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 (arg1)
- функция BobsToolbox: Test1 (arg1)
Да, похоже, вы нашли ответ! Когда вы создаете функцию BobsToolbox: Test1 (arg1), первый аргумент после имени функции, использующей pcall, как ожидается, будет объектом для работы. После этого аргумент является аргументом, который вы действительно хотите использовать. – Venesectrix
Да, это кажется правильным. – AKX