Clojure符号的相等性

4

我遇到了一个Clojure项目的问题,但我似乎找不到答案。我想要比较两个符号:

'x  'y

但是当我使用以下代码时:
(= ('x 'y))

它返回true。与此相同的是:

(identical? 'x 'y)

我发现'identical'比较内存地址,但是我不知道为什么当比较'x'和'y'时返回true?我没有看到像这样的问题,大多数其他帖子都比较数字。

1
(= ('x 'y)) 中,你正在将 ('x 'y) 与什么进行比较?因为 (= 'x 'y) 返回 false。 - octopusgrabbus
啊,看来我的语法有误。谢谢。 - thisisnotabus
你正在将 'x' 作为一个函数调用。符号(像关键字一样)实现了IFn接口,以便在映射中查找自己(并在传递非映射对象时返回nil)。 - Alex
2个回答

9
你正在将符号列表与空值进行比较。如果你只向等号传递一个参数,默认情况下它会返回true。只需删除括号并将符号本身进行比较即可。(= 'x 'y)

1
该列表没有引用,因此实际上正在调用“x”作为函数(请参见marivas的答案)。 - Alex

6
(= nil) ; => true

('x 'y) ; => nil

('x #{'x}) ; => 'x

('x #{'z} :one) ; => :one

(instance? clojure.lang.IFn 'x) ; => true

没有什么比自解释的代码更好了,尤其是我的英语非常差;-) 抱歉!!! - marivas11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接