@ lua中的 “:” 号 调用 和 pcall函数 调用
个人在此分享一下新学lua的 遇到的两个非常简单的小坑, 简单,但是却让人抓狂,可能是因为太不起眼了所以导致网上没有太多关于其的资料
“:” 号定义 与 "."调用
这是很多初学lua时都会犯的错误,但是由于非常微小,不起眼所以很可能会被忽略, 因此而耽误很长时间 代码片
.
-- 函数定义 " : "
function Person:talk(words)
print(self.name .. ", 说 : " .. words);
end
// 函数调用
Person.talk(self,9); √
Person.talk(9); ×
Person:talk(9); √
Person:talk(self,9); ×
-- 其实此时只要看一看 error 提示: attempt to index local 'self' (a number value)非常的明显了
-- =============================================================
-- 函数定义 " . "
function Person.say(words)
print("mm, 说 : " .. words);
end
// 函数调用
Person.say(9); √
Person.say(self,9); ×
Person:say(9); ×
Person:say(self,9); ×
那么 以".“定义 以”:"调用 也如此, 因此 在编写lua时 最好就是 以 ":“定义 以”:"调用
原因:
在 lua中 “:” 号的作用 就是在定义函数的时候 默认第一个参数是 self 也就是自己,
在使用":“号调用函数的时候 就是 传入当前调用此函数的 本身, 关于”:"的含义网上有大把, 此处不多解释
如果在使用 “:” 号 定义函数时 如果使用 “.” 来调用 那么 第一个参数就是 self,
pcall 捕捉异常
虽然lua 作为一款嵌入式脚本,很多时候都无需lua来处理异常,但是 lua 官方还是提供了 pcall,
相信不少 人 在调用函数的时候习惯性加()一对小括号,但是如果在 使用 pcall函数时 加一对小括号 就会发现 …
代码片
.
function bug()
error("有错误");
end
local a, p = pcall(bug());
print(a, p);
// 以上的错误写法
注: 在使用 pcall调用函数的时候千万不要 写成
pcall(bug()); ×
如果写成上述写法 ,错误还是会抛出
如果要拦下错误的正确写法是:
pcall(bug); √
//
好了,祝你学习lua顺利