如何检查 Lua 中的两个值是不是原始相等?
Posted
技术标签:
【中文标题】如何检查 Lua 中的两个值是不是原始相等?【英文标题】:How to check if two values in Lua are primitively equal?如何检查 Lua 中的两个值是否原始相等? 【发布时间】:2016-09-27 12:28:05 【问题描述】:当在 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
实现...)
【问题讨论】:
【参考方案1】:如果我正确理解您的问题,我认为您的意思是使用lua_rawequal
:
int lua_rawequal (lua_State *L, int index1, int index2);
如果索引
index1
和index2
中的两个值是,则返回1 原始相等(即,不调用元方法)。否则 返回 0。如果任何索引无效,也返回 0。
【讨论】:
哎呀,是的。通过 API 扫描两次,不知何故两次都错过了!以上是关于如何检查 Lua 中的两个值是不是原始相等?的主要内容,如果未能解决你的问题,请参考以下文章