引用相等

类

local Car = {}
Car.__index = Car

function Car.new(model)
  return setmetatable({model = model}, Car)
end

local car1 = Car.new("Lada")
local car2 = Car.new("Lada")
local car3 = car1

-- == on tables compares references
local equal1 = car1 == car2
-- equal1 = false
local equal2 = car1 == car3
-- equal2 = true

-- With __eq, == can compare the content
function Car.__eq(a, b)
  return a.model == b.model
end

local equal3 = car1 == car2
-- equal3 = true

-- rawequal ignores __eq: references only
local equal4 = rawequal(car1, car2)
-- equal4 = false
local equal5 = rawequal(car1, car3)
-- equal5 = true

print("equal1 = " .. tostring(equal1))
print("equal2 = " .. tostring(equal2))
print("equal3 = " .. tostring(equal3))
print("equal4 = " .. tostring(equal4))
print("equal5 = " .. tostring(equal5))