题
这是一个哇(魔兽世界的)lua脚本问题。不是很多这些问,在这里,但我没有把和计算器是程序员的绿洲。
问题:
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".那么,第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
结果:值的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":")
- 功能BobsToolbox.Test1(arg1)
- 功能BobsToolbox:Test1(arg1)
解决方案
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"必须提供的"自我"的说法。
其他提示
相关:有很好的生活代码编辑哇。我用LuaSlinger,但事实证明,没有再开发和开发建议 哈克 代替。
然而,什么你可能会遇到这里是结肠癌的方法-叫法只是语法糖,同上,用于方法的定义,请参考.基本上,如果你这样做 foo:bar("quux!")
, 里foo是一个目的,你是在现实中只是在做 foo.bar(foo, "quux!")
.
希望这可以帮助!
嗯,我不认为WoWWiki是错误的。这里是代码,我在使用:
function myTest(arg1) return arg1 .. 10; end
local retOK, ret1 = pcall(myTest,"string value");
DEFAULT_CHAT_FRAME:AddMessage(ret1);
local retOK, ret1 = pcall(myTest,"string value", "bob");
DEFAULT_CHAT_FRAME:AddMessage(ret1);
这里的输出是我在我的将军聊天框:
string value10
string value10
你怎么想你的样的代码?我只是我的代码贴到现有的国防部lua文件,并确保国防部启用了在扩展中心的窗口之前的选择我的个性和记录。我做了一些变化来源lua文件和输入:
/控制台reloadui
尝试新的改变和有结果出来我的屏幕。我没有太多的建议给你,因为我没有做多少工作与哇,插件。你有没有试过这个代码空白的附件,以确保没有别的干扰?你有没有真的尝试中的代码游戏?如果你能提供任何更多信息或要我试试其他任何东西,让我知道!
更新:决定尝试一些更多的试验。这里是测试(同功能):
local retOK, ret1 = pcall(myTest,"");
DEFAULT_CHAT_FRAME:AddMessage(ret1);
local retOK, ret1 = pcall(myTest, nil, "bob");
DEFAULT_CHAT_FRAME:AddMessage(ret1);
并的结果:
10
attempt to concatenate local 'arg1' (a nil value)
有趣的是,误差我看到的时候arg1是无稍有不同的错误你看到的。我会有兴趣知道你是如何来测试你的代码。或者,也许你没有副本的错误下逐字?我猜你也可以试着清除你的WTF文件夹和禁用你的余扩展中心来测试这一功能。如果它使一个区别,那么你可以使他们能一个一个时间直到你发现的问题。