<
运算符在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
元方法。我试了一下,它可以工作,但我真的想使用小于号<
,而不是使用错误符号的hack。谢谢!
a*(b+5)/c<d
这样做,其中a
、b
、c
和d
都是向量(数组)。将其重写为前缀函数调用非常冗长:less_than(divide(multiply(a, add(b, 5),c),d)
。我不能要求我的用户编写这样的语句。 - jenny