通过链接列表引用的值和平等的平等

时间:2014-11-12 05:14:29

标签: smalltalk squeak

似乎很难获得有关Squeak的正确信息来源。 我有几个基本问​​题:

  1. ' ='通过参考检查平等?

  2. ' =='检查值是否相等?

  3. 集合 - 链表 - 如果我这样做:

    list := LinkedList new.
    
    element := list first.
    
  4. 这是否意味着元素和'首先列出'是对内存中相同位置的引用(thr链表中的第一个位置?)

    1. 为什么我需要覆盖operator = for linked list?我该怎么做?

1 个答案:

答案 0 :(得分:3)

默认情况下==是引用相等的。在对象 =中定义为

= anObject

   ^ self == anObject

但是其他类通常会覆盖它。例如, Character =被定义为

= aCharacter 

   ^ self == aCharacter or:[
      aCharacter isCharacter and: [
         self asciiValue = aCharacter asciiValue]]

您可以通过执行=来获取#= implementors的所有实现者。

在您的情况下,elementlist first引用同一个对象。这是因为first实现为

first
   ^ self at: 1

并且at会返回位置1上的元素。但如果first将实现为

first
   ^ (self at: 1) copy

然后它将返回元素的副本(或者如果您使用element := list first copy),那么与false相比,它们将返回==,但如果=是以智能方式实现,在大多数情况下应该返回true

还要确保您要使用 LinkedList ,因为在 的分支中,它主要用于进程调度,我认为有一个讨论 LinkedList 更多的是一个实用程序集合。具有随机访问功能的最常用集合是OrderedCollection