class - Lua 检查表是否为 'instance'

标签 class object lua instance

给定一个表,有没有办法检查它是否是任何类的实例对象?

假设所有类定义如下所示:

Class = {}
Class.__index = Class

function Class.new()
    return setmetatable({}, Class) -- returns an instance
end

最佳答案

我只使用 getmetatable 函数

if getmetatable(thing) == Class then

但是如果你使用某种类型的继承,那么你可以试试这个
local A = {} A.__index = A
function A:new() return setmetatable({}, A) end
function A:foo() print('foo') end

local B = setmetatable({}, A) B.__index = B
function B:new() return setmetatable({}, B) end
function B:boo() print("boo") end

local function is_instance(o, class)
  while o do
    o = getmetatable(o)
    if class == o then return true end
  end
  return false
end

local a = A:new()
local b = B:new()

a:foo()
b:foo()
b:boo()

print(is_instance(a, A))
print(is_instance(a, B))
print(is_instance(b, B))
print(is_instance(b, A))

关于class - Lua 检查表是否为 'instance',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192939/

相关文章:

string - 在两个字符串之间切换,如 boolean 值

编织到单词时,Rmarkdown 无法找到 lua 过滤器

c++ - 无效使用 void 表达式,怎么办?

php - 命名空间和类扩展

Java类问题

java - 解决一个java谜语

javascript - 操纵ajax响应

C++在多个对象实例之间共享一个变量

lua - Lua中的第三方库通常是如何处理的

javascript - 如何从多维对象中获取键及其值