这是一个魔兽世界(魔兽世界)lua脚本问题.这里没有多少人被问到,但我无处可转,Stackoverflow是程序员绿洲的答案.
题:
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'上执行连接(一个零值)".如果我将代码更改为:
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
结果:字符串值10
我是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
以下内容之间有什么区别:("."vs":")
function BobsToolbox.Test1(arg1)
功能BobsToolbox:Test1(arg1)
Bobby Cannon.. 6
Lua文档:
http://www.lua.org/pil/16.html
这种自我参数的使用是任何面向对象语言的中心点.大多数OO语言都有这种机制部分地隐藏在程序员之外,因此她不必声明这个参数(尽管她仍然可以使用单词self
或this
在方法中).Lua也可以使用冒号运算符隐藏此参数.我们可以将之前的方法定义重写为
function Account:withdraw (v) self.balance = self.balance - v end
并且方法调用为
a:withdraw(100.00)
冒号的作用是在方法定义中添加额外的隐藏参数,并在方法调用中添加额外的参数.冒号只是一个句法设施,虽然方便; 这里没有什么新东西.我们可以使用点语法定义函数并使用冒号语法调用它,反之亦然,只要我们正确处理额外参数:
Account = { balance=0, withdraw = function (self, v) self.balance = self.balance - v end } function Account:deposit (v) self.balance = self.balance + v end Account.deposit(Account, 200.00) Account:withdraw(100.00)
可能的结论:
考虑到这一点,我假设在使用"pcall"调用":"函数时,必须提供"self"参数.
Lua文档:
http://www.lua.org/pil/16.html
这种自我参数的使用是任何面向对象语言的中心点.大多数OO语言都有这种机制部分地隐藏在程序员之外,因此她不必声明这个参数(尽管她仍然可以使用单词self
或this
在方法中).Lua也可以使用冒号运算符隐藏此参数.我们可以将之前的方法定义重写为
function Account:withdraw (v) self.balance = self.balance - v end
并且方法调用为
a:withdraw(100.00)
冒号的作用是在方法定义中添加额外的隐藏参数,并在方法调用中添加额外的参数.冒号只是一个句法设施,虽然方便; 这里没有什么新东西.我们可以使用点语法定义函数并使用冒号语法调用它,反之亦然,只要我们正确处理额外参数:
Account = { balance=0, withdraw = function (self, v) self.balance = self.balance - v end } function Account:deposit (v) self.balance = self.balance + v end Account.deposit(Account, 200.00) Account:withdraw(100.00)
可能的结论:
考虑到这一点,我假设在使用"pcall"调用":"函数时,必须提供"self"参数.