if h then

return (h(op1, op2))

else

error(···)

end

end

end

a > b is equivalent to b < a.

"le": the <= operation.

function le_event (op1, op2)

if type(op1) == "number" and type(op2) == "number" then

return op1 <= op2 -- numeric comparison

elseif type(op1) == "string" and type(op2) == "string" then

return op1 <= op2 -- lexicographic comparison

else

local h = getcomphandler(op1, op2, "__le")

if h then

return (h(op1, op2))

else

h = getcomphandler(op1, op2, "__lt")

if h then

return not h(op2, op1)

else

error(···)

end

end

end

end

a >= b is equivalent to b <= a. Note that, in the absence of a "le" metamethod, Lua tries the "lt", assuming that a <= b is equivalent to not (b < a).

"index": The indexing access table[key].

function gettable_event (table, key)

local h

if type(table) == "table" then

local v = rawget(table, key)

if v ~= nil then return v end

h = metatable(table).__index

if h == nil then return nil end

else

h = metatable(table).__index

if h == nil then

error(···)

end

end

if type(h) == "function" then

return (h(table, key)) -- call the handler

else return h[key] -- or repeat operation on it

end

end

"newindex": The indexing assignment table[key] = value.

function settable_event (table, key, value)

local h

if type(table) == "table" then

local v = rawget(table, key)

if v ~= nil then rawset(table, key, value); return end

Lua coding guideWhere stories live. Discover now