以面向对象的方式调用同一个函数。

标准Lua允许我使用变量调用函数。例如,看下面的代码:

function person(func) --func值为:saySomething
    local thefunc = func
    thefunc() --可用变量调用函数
end

function saySomething()
    print("hello")
end

那么我的问题是,我们可以用面向对象的方式做同样的事情吗?例如:

--伪代码,让您了解一般想法
class test
function test:init(func) --func值为:saySomething
    self.func = func
end

function test:person()
    self.self.func() --这不起作用
end

function test:saySomething()
    print("hello")
end
点赞
用户2765696
用户2765696

我找到了解决方案。

self[self.func](self) - -self.func需要成为一个字符串才能工作
2015-09-02 23:03:12
用户2546626
用户2546626

使用 : 作为分隔符在表格中定义函数,将以调用时传入的第一个参数作为本地变量 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 中的面向对象编程使用这种形式的调用和函数。

要深入了解,请参阅 元表

当您需要私有成员时,可以在对象构造函数中隐藏这些变量,请参阅 闭包

2015-09-03 12:41:34