2016-05-29 2 views
2

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

Например:

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

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

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

+2

'lua_rawequal'. – Sneftel

ответ

4

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

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

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

+1

Ой, да. Проверял API дважды и как-то пропустил это оба раза! – BadZen

Смежные вопросы