【问题标题】: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 的情况下做到这一点,我真的很想知道我是否可以这样做,如果可以,那么如何)
  • 对该问题的公认答案是“所有表都没有单一的元表”。这确实是这个问题的最佳答案。表格的设计并不是为了有一套千篇一律的方法。它们旨在表示各种不同的对象。
  • 好的,谢谢,所以它对表格来说是“否”,但它可以是对类吗?不是我创建的自定义类(例如,如果我想修改,之前有类,如果我想修改这些类怎么办?我可以使用包装器,但还有其他方法吗?)

标签: c# lua meta-method


【解决方案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 进行改装,所以我没有创建我想提供自定义扩展的类。我目前无法使用我的电脑(直到明天);但我可以尽快尝试你的方法并说它是否有效。我仍然非常感谢您的帮助,谢谢
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 2022-10-18
相关资源
最近更新 更多