我试图找到一种使用标准<
运算符在 Lua 中进行逐个元素比较的方法。例如,这是我想做的:
a = {5, 7, 10}
b = {6, 4, 15}
c = a < b -- should return {true, false, true}
我已经有代码用于加法(和减法、乘法等)。我的问题是 Lua 强制将比较结果与布尔值进行比较。我不想要一个布尔值,我想要一个表格作为比较的结果。
到目前为止,这是我的代码,加法有效,但小于比较不起作用:
m = {}
m['__add'] = function (a, b)
-- Add two tables together
-- Works fine
c = {}
for i = 1, #a do
c[i] = a[i] + b[i]
end
return c
end
m['__lt'] = function (a, b)
-- Should do a less-than operator on each element
-- Doesn't work, Lua forces result to boolean
c = {}
for i = 1, #a do
c[i] = a[i] < b[i]
end
return c
end
a = {5, 7, 10}
b = {6, 4, 15}
setmetatable(a, m)
c = a + b -- Expecting {11, 11, 25}
print(c[1], c[2], c[3]) -- Works great!
c = a < b -- Expecting {true, false, true}
print(c[1], c[2], c[3]) -- Error, lua makes c into boolean
Lua 编程手册说__lt
元方法调用的结果总是被转换为布尔值。我的问题是,我该如何解决这个问题?我听说 Lua 对 DSL 很好,我真的需要语法才能在这里工作。我认为使用 MetaLua 应该是可能的,但我不确定从哪里开始。
一位同事建议我只使用<<
元__shl
方法。我尝试了它并且它有效,但我真的想使用<
少于,而不是使用错误符号的黑客。
谢谢!