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

Function 以面向对象的方式调用相同的函数,function,oop,lua,Function,Oop,Lua,标准lua允许我使用变量调用函数。e、 g.见以下代码: 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 cod

标准lua允许我使用变量调用函数。e、 g.见以下代码:

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
我找到了解决办法

self[self.func](self) --self.func needs to be a string for it to work
我找到了解决办法

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

在以
作为分隔符的表中定义函数时,将调用的第一个给定参数设置为函数体的局部变量
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

进一步说,你应该看一看


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

在表中定义一个函数,并使用
作为分隔符,将调用的第一个给定参数设置为局部变量
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

进一步说,你应该看一看


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

您可以使用
self.func=test.saySomething
,然后执行
self:func()
,在
self
上调用方法
saySomething
,不需要存储函数的键。您可以使用
self.func=test.saysome
和do
self:func()
稍后在
self
上调用方法
saysome
,不需要存储函数的键。您可以执行
self:func()
您可以执行
self:func()