在同一个 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()