是否可以向类型/类添加自定义方法?

Posted

技术标签:

【中文标题】是否可以向类型/类添加自定义方法?【英文标题】:Is it possible to add custom methods to types/classes? 【发布时间】:2021-06-30 18:20:42 【问题描述】:

就像标题中问的那样,假设我想为table 类型添加一个自定义方法,比如说table:printContent(),Lua 中有什么方法可以实现这一点吗?我的意思是,纯粹的,Lua。例如,在 C# 中,您可以使用扩展来做到这一点:

using System;
namespace Main 
    public static class Extension 
        public static void printContent(this table mytable) 
            foreach(var content in mytable) 
                Console.WriteLine(content.ToString());
            
        
      

现在也可以,只是在 Lua 中?

启发我的问题(这个问题并没有告诉我我想学什么,是的,我想要 OOP,如果我想在 Lua 中进行修改)

How do I add a method to the table type?

【问题讨论】:

您的问题与您在帖子中链接的问题有何不同? 问题本身并没有什么不同,但正如我所写/指定的那样,解决方案确实与帖子相符。我想知道它是否可能,是与否,我不想听到任何其他信息(例如,您可以在没有 OOP 的情况下做到这一点,我真的很想知道我是否可以这样做,如果可以,那么如何) 对该问题的公认答案是“所有表都没有单一的元表”。这确实是这个问题的最佳答案。表格的设计并不是为了有一套千篇一律的方法。它们旨在表示各种不同的对象。 好的,谢谢,所以它对表格来说是“否”,但它可以是对类吗?不是我创建的自定义类(例如,如果我想修改,之前有类,如果我想修改这些类怎么办?我可以使用包装器,但还有其他方法吗?) 【参考方案1】:

好的,谢谢,所以它对于表格来说是“否”,但对于课程可以是“是”吗? 不是我创建的自定义类(如果我想修改 例如,之前有类,如果我想修改这些怎么办 上课?我可以使用包装器,但还有其他方法吗?)

一个类总是使用 Lua 表实现的。

最小示例:

MyClass = 
function MyClass:new(o)
  o = o or 
  setmetatable(o, self)
  self.__index = self
  return o
end

如果你想向 MyClass 添加一个新方法,只需实现它

function MyClass:MyNewMethod()
end

同样的方法当然可以用来覆盖现有的方法。

【讨论】:

非常感谢,但是如果我无法访问课程怎么办?我的意思是像有一些名为GameObject 的类(不是真名,但这只是一个示例),我无法访问(我的意思是我可以使用该类,但我没有创建该类,所以我真的不能这样做),IDE 会重新识别吗? 您无法访问该课程是什么意思?只要该类不在 C 中管理,您就可以更改它。给我一个例子,这不起作用 我想使用 Lua 进行改装,所以我没有创建我想提供自定义扩展的类。我目前无法使用我的电脑(直到明天);但我可以尽快尝试你的方法并说它是否有效。我仍然非常感谢您的帮助,谢谢

以上是关于是否可以向类型/类添加自定义方法?的主要内容,如果未能解决你的问题,请参考以下文章

我可以为现有的Ruby类添加自定义方法吗?

是否可以使用 PayPal PayFlow 向 Paypal 发送自定义货币类型?

Python向方法中传递自定义类型参数

是否可以向 HealthKit 添加自定义数据?

是否可以向 HealthKit 添加自定义数据?

idea为方法添加自定义注释,param参数选择啥类型