lua 中 python 类 的替代方案是什么?

What is a alternative for python classes in lua?

所以我正在尝试将 python 转换为 lua 但我现在遇到的障碍是 class 我不确定如何将 class 到 lua 有谁知道我将如何将 class 从 python 转换为 lua?

python class

class

OOP 魔法可以用 Lua tables 和 metatables 来完成。

Python
在此处查看 The __init__() Function 示例...
https://www.w3schools.com/python/python_classes.asp

让我们用 Lua...
来实现它 (Lua 5.4 交互式控制台)

> _VERSION
Lua 5.4
> Person = setmetatable({},{
__call = function(self, name, age)
self.name = name
self.age = age
return {name = self.name, age = self.age}
end
})
> p1 = Person("John", 36)
> print(p1.name, p1.age)
John    36

所以,有些读者会问:为什么一个metatabled table?
一个简单的函数可以完成同样的工作。
一旦 table 有了元 table,添加方法就很简单了...

> Person = setmetatable({},{
__call = function(self, name, age)
self.name, self.age = name, age
table.insert(self, {name = self.name, age = self.age}) -- Numbered keys are the Data part   
return {name = self.name, age = self.age}
end,
__index = {list = function(self) for i = 1, #self do print(self[i].name, self[i].age) end end}
})
> Person("John", 31);
> Person("Jack", 32);
> Person("Jim", 33);
> Person:list()
John    31
Jack    32
Jim 33

...可以自己处理table的数据。
可以用 metatables/methods.
控制 table 的行为是一个很大的好处 以上例子只是冰山一角
看一下字符串的 __index...

> for key, value in pairs(getmetatable(_VERSION).__index) do print(key, "=", value) end
byte    =   function: 0x565d6f20
lower   =   function: 0x565d4d90
len =   function: 0x565d4750
sub =   function: 0x565d7210
dump    =   function: 0x565d5d00
gsub    =   function: 0x565d7dc0
char    =   function: 0x565d5060
unpack  =   function: 0x565d6530
match   =   function: 0x565d7da0
packsize    =   function: 0x565d6420
pack    =   function: 0x565d6950
upper   =   function: 0x565d4ac0
format  =   function: 0x565d52d0
reverse =   function: 0x565d4b50
find    =   function: 0x565d7db0
gmatch  =   function: 0x565d70d0
rep =   function: 0x565d4be0

因此这是可能的...

> print(("koyaanisqatsi"):upper():reverse())
ISTAQSINAAYOK

意思是:如果方法的返回数据类型有一个方法,则方法可以被链接起来

Exceptions are: len() accept but dont return a string and sub() needs numbers before it returns a string also dump() needs a self defined function and returns a binary (almost unreadable) string.