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



所以我正试图将python转换为lua,但我现在遇到的一个障碍是类。我不确定如何将类转换为lua。有人知道我将如何将类从python转换为lua吗?

python类

class

OOP的魔力可以用Lua表和元表来实现。

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

所以,有些读者会问:为什么要用跖骨桌子
一个简单的函数也可以做同样的工作
一旦表有了元表,那么添加方法就很简单了。。。

> 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

它可以自己处理表的数据
表的行为可以用元表/方法控制,这是一个很大的好处
上面的例子只是冰山一角
看看字符串的__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

Means:如果返回的数据类型具有方法,则方法可以被链接

例外情况是:len((接受但不返回字符串,sub((在返回字符串之前需要数字,dump((需要自定义函数并返回二进制(几乎不可读(字符串。

最新更新