这是一个哇(魔兽世界的)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语言都有这种机制的部分隐藏从程序员,因此,她没有宣布这一参数,(尽管她仍然可以使用这个词 selfthis 内法)。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文件夹和禁用你的余扩展中心来测试这一功能。如果它使一个区别,那么你可以使他们能一个一个时间直到你发现的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top