似乎很难获得有关Squeak的正确信息来源。 我有几个基本问题:
' ='通过参考检查平等?
' =='检查值是否相等?
集合 - 链表 - 如果我这样做:
list := LinkedList new.
element := list first.
这是否意味着元素和'首先列出'是对内存中相同位置的引用(thr链表中的第一个位置?)
答案 0 :(得分:3)
默认情况下==
是引用相等的。在对象 =
中定义为
= anObject
^ self == anObject
但是其他类通常会覆盖它。例如, Character =
被定义为
= aCharacter
^ self == aCharacter or:[
aCharacter isCharacter and: [
self asciiValue = aCharacter asciiValue]]
您可以通过执行=
来获取#= implementors
的所有实现者。
在您的情况下,element
和list first
引用同一个对象。这是因为first
实现为
first
^ self at: 1
并且at
会返回位置1上的元素。但如果first
将实现为
first
^ (self at: 1) copy
然后它将返回元素的副本(或者如果您使用element := list first copy
),那么与false
相比,它们将返回==
,但如果=
是以智能方式实现,在大多数情况下应该返回true
。
还要确保您要使用 LinkedList ,因为在pharo squeak的分支中,它主要用于进程调度,我认为有一个讨论 LinkedList 更多的是一个实用程序集合。具有随机访问功能的最常用集合是OrderedCollection