2

在 Lua 中重写相等运算符时(通过 " __eq" 元方法),有没有办法仍然检查原始相等性(即不调用重写__eq,但检查两个表值是否在引用上相同?)我需要这样做来自 C API,但我在那里找不到合适的函数。

例如:

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

Wheresome_comparison()不调用元__eq方法。

(请注意lua_compare()不满足这一点,特别是。我想要一个lua_rawcompare(),如果你愿意的话 - 或者更确切地说是一个能给我等价的技巧或解决方法。这个想法是为了防止__eq实现中的无限递归......)

4

1 回答 1

4

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

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

如果索引中的两个值原始相等(即不调用元方法),则返回index11 index2。否则返回 0。如果任何索引无效,也返回 0。

于 2016-05-29T17:18:19.277 回答