2016-05-29 588 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