gpt4 book ai didi

emacs - 如何在Emacs Lisp中获取唯一的对象ID?

转载 作者:行者123 更新时间:2023-12-04 16:48:03 27 4
gpt4 key购买 nike

emacs lisp是否具有提供唯一对象标识符的功能,例如内存地址? Python有id(),它返回一个整数,该整数保证在当前存在的对象之间是唯一的。 elisp呢?

最佳答案

我知道想要id()这样的函数的唯一原因是比较对象,并确保它们仅在它们相同时才比较相等(例如,在相同的内存位置)。在Lisps中,这与在Python中有所不同:

在包括elisp在内的大多数lisps中,有几种不同的平等概念。最昂贵,最弱的等效项是equal。这不是您想要的,因为如果两个列表(例如)具有相同的元素(使用equal进行递归测试),则它们是相等的。因此

(equal (list 1 2) (list 1 2)) => T

是真的。另一端是 eq,它测试“身份”而不是相等性:
(eq (list 1 2) (list 1 2)) => NIL

我想这就是您想要的。

因此,Python似乎可以通过提供一个相等性测试来工作,然后提供一个为每个对象提供存储位置的函数,然后可以将其作为整数进行比较。另一方面,在Elisp(至少也是Common Lisp)中,“平等”的含义不只一个。

注意,还有“eql”,位于两者之间。

(编辑:我的原始答案可能不清楚为什么 eqequal之间的区别可能解决了原始海报所具有的问题)

关于emacs - 如何在Emacs Lisp中获取唯一的对象ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com