如何检查Lua中的两个值是否原始相等?

时间:2016-05-29 17:11:46

标签: lua comparison lua-api c-api

当重写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实现中的无限递归...)

1 个答案:

答案 0 :(得分:4)

如果我正确理解您的问题,我认为您的意思是使用lua_rawequal

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

如果索引index1index2中的两个值为,则返回1   原始相等(即不调用metamethods)。除此以外   返回0.如果任何索引无效,则返回0.