当重写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
实现中的无限递归...)
答案 0 :(得分:4)
如果我正确理解您的问题,我认为您的意思是使用lua_rawequal
:
int lua_rawequal (lua_State *L, int index1, int index2);
如果索引
index1
和index2
中的两个值为,则返回1 原始相等(即不调用metamethods)。除此以外 返回0.如果任何索引无效,则返回0.