私は
if getmetatable(thing) == Class then
だけgetmetatable機能を使用しかし、あなたは継承のいくつかのタイプを使用している場合、あなたは `debug.getmetatable`はこの場合に使用することができ、この1
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))
を試すことができます。 – moteus