2016-05-29 86 views
2

当在Lua中覆盖相等运算符(通过“__eq”metamethod)时,是否还有一种方法可以检查基本相等(即不调用覆盖的__eq,但检查两个表值是否相同?)需要从C API执行此操作,但我无法在其中找到合适的功能。如何检查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和两个值是 基本相等(即,没有调用metamethods)。否则, 返回0.如果任何索引无效,则返回0。

+1

哎呀,是的。通过API扫描两次,不知何故错过了两次! – BadZen

相关问题