【问题标题】:what kind of metamethods are these, why they exist and how they are created这些是什么类型的元方法,它们为什么存在以及它们是如何创建的
【发布时间】:2020-12-12 17:00:24
【问题描述】:

大家好!

我一直在研究元方法,我发现了一些奇怪的东西!

我已经知道 Lua 文档中提供的所有元方法,如 __add__index__newindex 等...但是我在论坛和这里的问题中看到人们使用像 __ev 这样的元方法, __close__group,我从未在其他任何地方看到这些元方法被使用或存在于任何文档中。

我的问题是,这些元方法存在吗?如果没有,它们是如何创建的?以及为什么人们创建这个元方法?

不管怎样,谢谢关注

【问题讨论】:

    标签: lua metatable meta-method


    【解决方案1】:

    这些是自定义元方法,在特定项目或框架中具有特殊用途。

    元方法用于扩展tableuserdata 的功能。这些对于实现 OOP 行为最有用。

    一些程序员出于内部目的和更好的可读性添加自定义元表和元方法,例如__super__extend__inherit。在大多数情况下,此类元数据用于__index__call 等标准元方法或用于清理对象、错误处理等的常规方法。

    例如,__close 可以与连接或文件对象一起使用,以便以可预测的方式管理它们,__gc 不能用于此目的。

    __group 用法示例:Lua metatables and metamethod - How to call a different member function

    【讨论】:

    • 扩展是你能做的魔法,不要忘记元方法__metatable 来保护扩展。例如,查看一个字符串 _VERSION 具有 __index 方法,因为表中填满了 string 函数。因此,对于每个字符串,您都可以施展魔法:print(_VERSION:rep(50)) 问题是:为什么没有数据类型表和整数没有元方法?
    猜你喜欢
    • 2022-08-13
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多