Как проверить, что два значения в Lua примитивно равны?

При переопределении операторов равенства в Lua (через метаметод «__eq») есть ли способ по-прежнему проверять примитивное равенство (т.е. не вызывать переопределенное __eq, а проверять, являются ли два табличных значения ссылочными одинаковыми?) Мне нужно сделать это из C API, но я не могу найти там подходящей функции.

Например:

lua_newtable(L);
lua_newtable(L);
assert(!some_comparison());
lua_pushvalue(L,-1);
assert(some_comparison());

Где some_comparison() не вызывает метаметод __eq.

(Обратите внимание, что lua_compare() не удовлетворяет этому, в частности. Я хочу lua_rawcompare(), если хотите - или, скорее, трюк или обходной путь, который даст мне эквивалент. Идея состоит в том, чтобы предотвратить бесконечную рекурсию в реализации __eq...)


person BadZen    schedule 29.05.2016    source источник


Ответы (1)


Если я правильно понял ваш вопрос, я думаю, вы имеете в виду использовать lua_rawequal:

int lua_rawequal (lua_State *L, int index1, int index2);

Возвращает 1, если два значения в индексах index1 и index2 примитивно равны (то есть без вызова метаметодов). В противном случае возвращает 0. Также возвращает 0, если какой-либо из индексов недействителен.

person hjpotter92    schedule 29.05.2016
comment
Упс, да. Дважды сканировал через API и оба раза как-то промахнулся! - person BadZen; 29.05.2016