gpt4 book ai didi

lua - PCALL 是怎么回事还是 Wowwiki 错了?

转载 作者:行者123 更新时间:2023-12-04 14:24:58 29 4
gpt4 key购买 nike

这是一个 WoW(魔兽世界)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 ":")

  • 函数 BobsToolbox.Test1(arg1)
  • 函数 BobsToolbox:Test1(arg1)

最佳答案

Lua 文档:

http://www.lua.org/pil/16.html

self 参数的使用是任何面向对象语言的中心点。大多数 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”调用“:”函数时,您必须提供“self”参数。

关于lua - PCALL 是怎么回事还是 Wowwiki 错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732607/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com