gpt4 book ai didi

oop - Lua继承不包括元方法吗?

转载 作者:行者123 更新时间:2023-12-02 01:27:28 26 4
gpt4 key购买 nike

<分区>

我正在尝试在 Lua 中实现简单的继承,如 PIL 16.2 中所示。 .然而,我遇到了一个令人惊讶的行为:元方法似乎不会被继承。在下面的示例中,我创建了一个包含 xy 成员的 Point 类,并为其提供了一个 __add 元方法。添加 Point 的实例时,一切正常,但如果我创建一个子类并添加它的实例,则会出现错误。

Point = {}

function Point:new(x, y)
local point = {}
setmetatable(point, self)
self.__index = self
point.x = x or 0
point.y = y or 0
return point
end

Point.__add = function(a, b)
return Point:new(a.x + b.x, a.y + b.y)
end

p = Point:new(2,2)
r1 = p + p
print(p.x, p.y) -- prints "4 4" as expected


ChildPoint = Point:new()
c = ChildPoint:new()

r2 = c + c -- Error: attempt to perform arithmetic on a table value (local 't1')
print(r.x, r.y)

我原以为 Lua 会在 ChildPoint 中寻找 __add,这会触发 ChildPoint__index,在中找到__add。但这似乎并没有发生。

为什么这不起作用,实际发生了什么,以及(如果这是正确的行为而不仅仅是我的错误)我如何在 Lua 中实现可继承的元方法?

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