是否可以向类型/类添加自定义方法?
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 进行改装,所以我没有创建我想提供自定义扩展的类。我目前无法使用我的电脑(直到明天);但我可以尽快尝试你的方法并说它是否有效。我仍然非常感谢您的帮助,谢谢以上是关于是否可以向类型/类添加自定义方法?的主要内容,如果未能解决你的问题,请参考以下文章