在这个例子中
> (= 1 1)
#t
> (= 'a 'a)
*** ERROR IN (console)@2.1 -- (Argument 1) NUMBER expected
(= 'a 'a)
1>
如何测试带引号的符号的相等性?
最佳答案
您可以使用eq?
,eqv?
或equal?
中的任何一个。
所有这三个对象都可以与任何对象一起使用而不会出错(与=
不同,后者只能与数字一起使用)。但是,结果将根据传入的类型而有所不同。但是,如果您知道要比较符号,则所有符号都将具有相同的结果。
如果您已完成任何Java编程,则eqv?
就像==
,而equal?
像.equals()
。简单来说,eqv?
进行身份比较,equal?
进行值比较。
(并且eq?
做一个直接的指针比较。对于某些实现,它可能比eqv?
更快,但要理解,有时对于相等的数字或字符,它返回false。对于其他实现,它与eqv?
完全相同。大多数情况下,出于鲁棒性,您应该坚持使用eqv?
进行身份比较,而忘记eq?
存在。)