Я пытаюсь найти способ сравнения элементов по элементу в Lua с использованием стандартного оператора <
. Например, вот что я хотел бы сделать:Элемент сравнения элементов в 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
. Я попробовал, и это работает, но я действительно хочу использовать <
меньше, чем вместо взлома с использованием неправильного символа.
Спасибо!
Зачем вам нужен оператор? не можете ли вы просто использовать обычную функцию? – Piglet
@ Piglet Я делаю DSL. Я хочу иметь возможность делать что-то вроде 'a * (b + 5)/c
jenny