Я написал тестовую служебную функцию aequals
(утверждение равно), которая ожидает фактический результат и ожидаемый результат в качестве аргументов. Я использую это так:
aequals(fib(8), 21);
Но теперь у меня есть функция с несколькими возвращаемыми значениями:
function stuff() return 1,2,3 end
Я хочу проверить ее функцию, либо проверив все вместе:
aequals( stuff(), {1,2,3} );
, но это не работает, потому что в стеке остается только "1" для aequals
.
Или хотя бы один за другим:
aequals( stuff()[1], 1 );
aequals( stuff()[2], 2 );
aequals( stuff()[3], 3 );
но это дает синтаксическую ошибку, потому что вещи возвращают кортеж, а не массив / таблицу.
Я попытался исправить это с помощью конструктора массива, который должен был преобразовать кортеж в массив / таблицу.
aequals( {stuff()}[1], 1 );
почему это синтаксическая ошибка, которую я не могу понять.
Я обошел это, определив вспомогательные функции, которые, я уверен, уже есть в Lua, если бы я только знал, где искать:
function arg0(a,b,c) return a end;
function arg1(a,b,c) return b end;
function arg2(a,b,c) return c end;
aequals( arg0(stuff()), 1 );
Хотя это работает, это довольно громоздко и было бы такгораздо приятнее иметь весь чек в одной строке ... но как?