如何检查 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);

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

【讨论】:

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

以上是关于如何检查 Lua 中的两个值是不是原始相等?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查数组中的所有值是不是彼此相等。 C++

C ++如何检查数组中的元素是不是相等?

检查两个数组的值是不是相等且顺序相同[关闭]

如何检查数组中的数字是不是相等?

使用 dplyr - R 检查组中的字符是不是全部相等

如何在一个循环中比较两个列表的值是不是相等?