Lua middleclass库。类函数是否优先调用与具有相同名称的混入函数?

我在使用Lua middleclass库的项目中。我的实验表明,如果一个类包含一个具有与类函数相同名称的函数的混合体,那么在类的实例上调用该函数将调用函数,而不是混入函数。

但我无法通过阅读middleclass的代码来找出原因。这种行为是有保证的,还是依赖于某些调用或包含顺序?

编辑:添加下面的最小代码。我可以依赖于myFoo:show()显示'Foo'吗?

class = require'middleclass')

- 这是一个中间类混合器,不是一个类
Bar = {}功能栏:show()
    打印(“ Bar”)
end

- 类Foo实现'show',并包括
- 混入也实现'show'
Foo = class('Foo')
Foo:include(Bar)

函数Foo:show()
    打印(“ Foo”)
end

- 类LittleFoo不实现'show',
- 但包括实现“ show”的混入
LittleFoo = class('LittleFoo')
LittleFoo:include(Bar)

- 程序
myFoo = Foo:new()
myLittleFoo = LittleFoo:new()

myFoo:show()-打印'Foo'
myLittleFoo:show()-打印'Bar'
点赞
用户7746452
用户7746452

这是预期行为,你从父类 Bar 继承了方法 show,但在你的类中有其他的实现方式。这是面向对象编程中的常见标准。

然而,在 middleclass 代码中,当你执行 Foo:include(Bar) 时,你只是从 Bar 中拷贝了一份方法列表(通过引用),但当你实现方法 Foo:show() ... end 时,你重写了这个方法,但只是对于 Foo 有效,因此在 Bar 中你仍有旧的方法。当你将它继承到 myLittleFoo 中时,你继承了旧版本的方法。

2020-05-08 08:05:01