Lua中将调试是错误提示吗?还是我不了解的特殊功能?

2026-04-01 19:491阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计349个文字,预计阅读时间需要2分钟。

Lua中将调试是错误提示吗?还是我不了解的特殊功能?

我正在尝试教我的一个朋友编程,基本上,他是用这段代码来找我帮忙的,它让我有点难懂:

lua+a={ name=aaa, function a(): new(self.x=sss, o={}, setmetatable(o, self), self.__index=self) return o end, function a(): some() return [...] end}

我正在尝试教我的一个朋友,基本上,他是用这个代码来找我的,它让我很难过:

a = {name = "aaa"} function a:new() self.x = "sss" o = {} setmetatable(o, self) self.__index = self return o end function a:some() return "[ " .. self.name .. " ]" end b = a:new() print(b:some()) print(b.x)

打印

[aaa]
SSS

两者都不可能,因为它们从来没有被设置为:new

经过一些调试,我调查一下,这里发生了一些有趣的事情:

Lua中将调试是错误提示吗?还是我不了解的特殊功能?

a = {name = "aaa", x = "sss"} function a:new() o = {} print(o.x, self.x) -- nil sss setmetatable(o, self) print(o.x, self.x, o, self, self.__index, o.__index) -- nil sss table: 0x1001280 table: 0x1001320 table: 0x1001320 nil self.__index = self print(o.x, self.x, o, self, self.__index, o.__index) -- sss sss table: 0x1001280 table: 0x1001320 table: 0x1001320 table: 0x1001320 return o end

注意第三次打印时,它返回self的.x值,但它是从o调用的,它与self没有“关系”,这怎么可能?

您已在metatable中将表a设置为__index字段,用于将使用:new()创建的所有表.当在b表中检查一些不存在的字段时,也将搜索值.这就是为什么你可以在表b中找到字段x或名称,即使你没有明确指定它.

本文共计349个文字,预计阅读时间需要2分钟。

Lua中将调试是错误提示吗?还是我不了解的特殊功能?

我正在尝试教我的一个朋友编程,基本上,他是用这段代码来找我帮忙的,它让我有点难懂:

lua+a={ name=aaa, function a(): new(self.x=sss, o={}, setmetatable(o, self), self.__index=self) return o end, function a(): some() return [...] end}

我正在尝试教我的一个朋友,基本上,他是用这个代码来找我的,它让我很难过:

a = {name = "aaa"} function a:new() self.x = "sss" o = {} setmetatable(o, self) self.__index = self return o end function a:some() return "[ " .. self.name .. " ]" end b = a:new() print(b:some()) print(b.x)

打印

[aaa]
SSS

两者都不可能,因为它们从来没有被设置为:new

经过一些调试,我调查一下,这里发生了一些有趣的事情:

Lua中将调试是错误提示吗?还是我不了解的特殊功能?

a = {name = "aaa", x = "sss"} function a:new() o = {} print(o.x, self.x) -- nil sss setmetatable(o, self) print(o.x, self.x, o, self, self.__index, o.__index) -- nil sss table: 0x1001280 table: 0x1001320 table: 0x1001320 nil self.__index = self print(o.x, self.x, o, self, self.__index, o.__index) -- sss sss table: 0x1001280 table: 0x1001320 table: 0x1001320 table: 0x1001320 return o end

注意第三次打印时,它返回self的.x值,但它是从o调用的,它与self没有“关系”,这怎么可能?

您已在metatable中将表a设置为__index字段,用于将使用:new()创建的所有表.当在b表中检查一些不存在的字段时,也将搜索值.这就是为什么你可以在表b中找到字段x或名称,即使你没有明确指定它.