Более простой способ вызвать функцию в той же таблице? - PullRequest
0 голосов
/ 19 сентября 2018

Интересно, есть ли более простой способ вызвать функцию или установить переменную из той же таблицы вместо записи имени таблицы.

Например, есть ли более простой способ вызова функции MyClass.test() из MyClass.setup() в приведенном ниже примере кода?

local MyClass = {}

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

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

MyClass.setup()

Ответы [ 4 ]

0 голосов
/ 21 сентября 2018
local MyClass = {}

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

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

MyClass.setup(MyClass)

ключ self.В этом состоянии MyClass является объектом и создается {}, поэтому вы можете использовать MyClass.Test(MyClass) для входящих параметров MyClass, чтобы использовать func test() из MyClass объекта.

ps :
Синтаксис сахар предоставлен Lua:
MyClass.setup (MyClass) ==> MyClass: setup ()

0 голосов
/ 19 сентября 2018

Вы можете настроить таблицу модулей как среду:

local print = print
local _ENV = {}

function test()
  print("Hello")
end

function setup()
  test()
end

setup()

return _ENV
0 голосов
/ 20 сентября 2018
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()
0 голосов
/ 19 сентября 2018

Если вы используете : для вызова функций вместо ., Lua неявно вставляет ссылку на саму таблицу в качестве первого аргумента (аналогично указателю this для некоторых объектно-ориентированных языков).Тогда вы можете сказать self:test(), чтобы избавиться от зависимости от имени.

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

MyClass:setup()
...