【问题标题】: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 实现...)

【问题讨论】:

    标签: lua comparison lua-api c-api


    【解决方案1】:

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

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

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

    【讨论】:

    • 哎呀,是的。通过 API 扫描两次,不知何故两次都错过了!
    猜你喜欢
    • 2018-09-05
    • 2015-08-24
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多