如何在 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实现中出现无限递归...)

点赞
用户1190388
用户1190388

如果我正确理解了你的问题,我认为你想要使用lua_rawequal

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

如果索引index1index2中的两个值是基本相等的(即,没有调用元方法),则返回1。否则返回0。如果任何一个索引无效,则也返回0。

2016-05-29 17:18:19