在同一个 table 中调用函数的更简单方法?
Simpler way to call a function in a same table?
我想知道是否有更简单的方法来调用函数或设置相同 table 的变量而不是写 table 名称。
例如,在我下面的示例代码中,是否有更简单的方法从 MyClass.setup()
调用 MyClass.test()
函数?
local MyClass = {}
function MyClass.test()
print("Hello")
end
function MyClass.setup()
MyClass.test()
end
MyClass.setup()
如果您使用 :
而不是 .
调用函数,Lua 隐式插入对 table 本身的引用作为第一个参数(类似于this
指针是一些面向对象的语言)。然后你可以说 self:test()
摆脱名称依赖。
local MyClass = {
test = function(self)
print("Hello")
end,
setup = function(self)
self:test()
end
}
MyClass:setup()
您可以将模块 table 设置为环境:
local print = print
local _ENV = {}
function test()
print("Hello")
end
function setup()
test()
end
setup()
return _ENV
local MyClass = {}
function MyClass:Setup()
print('hello...Setup')
end
function MyClass:Test()
self:Setup() -- self -> MyClass
print('hello...Test')
end
MyClass:Test()
-- or inherit
local newClass = MyClass
newClass:Test()
local MyClass = {}
function MyClass.test()
print("Hello")
end
function MyClass.setup(self)
self.test()
end
MyClass.setup(MyClass)
关键是self
。在状态下,MyClass
是一个obj,由{}
创建,所以可以使用MyClass.Test(MyClass)
传入参数MyClass
来使用func test()
的[=12] =] 对象。
ps:
Lua提供的语法糖:
MyClass.setup(MyClass) ==> MyClass:setup()
我想知道是否有更简单的方法来调用函数或设置相同 table 的变量而不是写 table 名称。
例如,在我下面的示例代码中,是否有更简单的方法从 MyClass.setup()
调用 MyClass.test()
函数?
local MyClass = {}
function MyClass.test()
print("Hello")
end
function MyClass.setup()
MyClass.test()
end
MyClass.setup()
如果您使用 :
而不是 .
调用函数,Lua 隐式插入对 table 本身的引用作为第一个参数(类似于this
指针是一些面向对象的语言)。然后你可以说 self:test()
摆脱名称依赖。
local MyClass = {
test = function(self)
print("Hello")
end,
setup = function(self)
self:test()
end
}
MyClass:setup()
您可以将模块 table 设置为环境:
local print = print
local _ENV = {}
function test()
print("Hello")
end
function setup()
test()
end
setup()
return _ENV
local MyClass = {}
function MyClass:Setup()
print('hello...Setup')
end
function MyClass:Test()
self:Setup() -- self -> MyClass
print('hello...Test')
end
MyClass:Test()
-- or inherit
local newClass = MyClass
newClass:Test()
local MyClass = {}
function MyClass.test()
print("Hello")
end
function MyClass.setup(self)
self.test()
end
MyClass.setup(MyClass)
关键是self
。在状态下,MyClass
是一个obj,由{}
创建,所以可以使用MyClass.Test(MyClass)
传入参数MyClass
来使用func test()
的[=12] =] 对象。
ps:
Lua提供的语法糖:
MyClass.setup(MyClass) ==> MyClass:setup()