以面向对象的方式调用相同的函数

时间:2015-09-02 22:49:57

标签: function oop lua

标准lua允许我用变量调用函数。例如见下面的代码:

function person(func) --func value: saySomething
    local thefunc = func
    thefunc() --var used to call function works
end

function saySomething()
    print("hello")
end

所以我的问题是我们能否以面向对象的方式做同样的事情? e.g:

--psuedo code to give you a general idea
class test
function test:init(func) --func value: saySomething
    self.func = func
end

function test:person()
    self:self.func() --this doesnt work
end

function test:saySomething()
    print("hello")
end

2 个答案:

答案 0 :(得分:1)

:作为分隔符的表中定义函数,将第一个给定的参数设置为函数体的局部变量self

:作为分隔符的表中调用函数会将表引用作为第一个参数添加到参数列表中。

local myclass = {}

function myclass:saySomething()
    print(self)
end
myclass.saySomething("Jiiiiiii~")   -- Jiiiiiii~

function myclass.saySomething(self)
    print(self)
end
myclass:saySomething()  -- table: 0x000a6ea0

如您所见,它打算使用这种形式的电话&在Lua中为OO共同运作。

为了更进一步,你应该看看metatables

如果您想要私有成员,可以在对象构造函数中隐藏这些变量,请参阅closures

答案 1 :(得分:-1)

我找到了解决方案。

self[self.func](self) --self.func needs to be a string for it to work