所以我正试图将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((需要自定义函数并返回二进制(几乎不可读(字符串。