Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 函数作为参数lua_Function_Parameters_Lua - Fatal编程技术网

Function 函数作为参数lua

Function 函数作为参数lua,function,parameters,lua,Function,Parameters,Lua,我的问题如下: 我希望有一个函数可以在lua中创建一个新对象,但是应该可以扩展它 function Class(table) local a = {} local t = {create = _create, __newindex = function(o,k,v) if k == "create" then --getmetatable(o).create = function() --_create(o)

我的问题如下:

我希望有一个函数可以在lua中创建一个新对象,但是应该可以扩展它

function Class(table)
local a = {}
local t = {create = _create, __newindex = function(o,k,v) 
            if k == "create" then
              --getmetatable(o).create = function()
                --_create(o) 
                --v()
              --end
              -- or just create(v.params)
            else
              rawset(o,k,v)
            end
          end,
}

setmetatable(a,t)
t.__index = t
end

function _create(o,...)
return newTable
end

ele = Class:create()
function Class:create( n )
    self.name = n
end
ele2 = Class:create("bbbb")
现在ele2没有名称,但它可以创建一个新对象,并使用给定的字符串作为名称


我可以从newindex中获取给定值(类型函数)的参数吗?或者我可以执行该值吗?

有几件事我不确定。正如Etan所说,什么是
newTable
,当
Class
是一个函数时,为什么要尝试将
create
设置为
Class
的函数

如果您正在寻找一种在创建类实例时初始化类实例的方法,则可以执行以下操作:

function Class()
    local class = {}
    class.__index = class 
    return setmetatable(class, {__call = function(...)
        local instance = setmetatable({}, class)
        if instance.init then 
            instance:init(select(2, ...))
        end 
        return instance
    end}) 
end

--now an example:

Dog = Class()

function Dog:init(name)
    self.name = name 
end

function Dog:bark()
    print(string.format("%s barked!", self.name))
end

local pedro = Dog("Pedro")
pedro:bark() --> pedro barked!

什么是
a
?什么是新表格?你给过元表函数吗?(当
Class
是一个函数时,
Class:create
如何工作?)