Lua检查方法是否存在

如何在Lua中检查方法是否存在?

function Object:myMethod() end

function somewhereElse()
  local instance = Object()

  if instance:myMethod then
    -- 这样做并不起作用。语法错误:在then附近期望有参数。
    --type(...)或~=nil等都是相同的。如何检查冒号函数?
  end
end

enter image description here

这是Lua面向对象编程。检查函数或点成员(表)不是问题。但如何检查方法(:)呢?

原文链接 https://stackoverflow.com/questions/70730820

点赞
stackoverflow用户2858170
stackoverflow用户2858170

使用 instance.myMethodinstance["myMethod"] 进行调用。

冒号语法只允许在函数调用和函数定义中使用。

instance:myMethod() 缩写为 instance.myMethod(instance)

function Class:myMethod() end 缩写为 function Class.myMethod(self) end

function Class.myMethod(self) end 缩写为 Class["myMethod"] = function (self) end

现在或许变得很明显了,一个方法只是一个使用方法名作为表键存储在表字段中的函数值。

所以,就像其他任何表元素一样,只需要使用键来索引表即可获取该值。

2022-01-16 14:36:57