在同一张表中调用函数的简化方法?

我想知道是否有一种更简单的方法来调用同一张表的函数或设置变量,而不是写表名。

例如,在我的下面的示例代码中,有没有一种更简单的方法从MyClass.setup()调用MyClass.test()函数?

local MyClass = {}

function MyClass.test()
  print("Hello")
end

function MyClass.setup()
  MyClass.test()
end

MyClass.setup()
点赞
用户1944004
用户1944004

如果您使用 : 而不是 . 调用函数,则 Lua 会隐式地将对该表本身的引用插入作为第一个参数(类似于某些面向对象语言中的 this 指针)。然后,您可以使用 self:test() 来摆脱名称的依赖。

local MyClass = {
    test = function(self)
        print("Hello")
    end,
    setup = function(self)
        self:test()
    end
}

MyClass:setup()
2018-09-19 09:43:27
用户107090
用户107090

你可以将模块表设置为环境:

local print = print
local _ENV = {}

function test()
  print("Hello")
end

function setup()
  test()
end

setup()

return _ENV
2018-09-19 10:24:20
用户5525442
用户5525442
local MyClass = {}
function MyClass:Setup()
    print('hello...Setup')
end

function MyClass:Test()
    self:Setup() -- self -> MyClass
    print('hello...Test')
end

MyClass:Test()
-- 或继承
local newClass = MyClass
newClass:Test()
2018-09-20 15:16:30
用户10318548
用户10318548
local MyClass = {}

function MyClass.test()
  print("Hello")
end

function MyClass.setup(self)
  self:test()
end

MyClass:setup()

关键在于 self。在这个状态下,MyClass 是一个对象,通过 {} 创建,所以可以使用 MyClass:setup() 的语法糖来调用 MyClass 对象的 test() 函数。

Lua 提供的语法糖:

MyClass:setup() 相当于 MyClass.setup(MyClass)

2018-09-21 10:32:05