Smalltalk中的关联集合和字典之间有什么区别?

Ric*_*Eng 4 dictionary smalltalk amber-smalltalk

| dict |
dict := #{'foo'->'brown'. 'bar'->'yellow'.
          'qix'->'white'. 'baz'->'red'. 'flub'->'green'} asDictionary.
dict at: 'qix'
Run Code Online (Sandbox Code Playgroud)

如果我PrintIt,我得到'白色'.如果我删除'asDictionary',我仍然会'白'.字典给了我一些关联集合不是什么?

Uko*_*Uko 7

表达式#{exp1 . sxp2 . exp3}是特定的并创建一个HashedCollection,这是一种特殊的字典,其中键是字符串(可能在Javascript中你经常使用这样的东西).

在其他小方面,没有这样的表达.相反,数组表达式看起来像:( {exp1 . sxp2 . exp3}没有前导#)在被引入,也可以在(这是Squeak的一个分支)和Amber中使用.现在,数组表达式创建了一个数组,因此您必须使用整数作为#at:消息.例如,dict at: 2将返回一个关联,'bar'->'yellow'因为它位于您创建的数组的第二个位置.

#asDictionary是一个集合的方法,它将集合转换为字典,因为集合的元素是关联.因此,如果您想创建一个包含字符串以外的键的字典,您可以这样做:

dict := {
    'foo' -> 'brown'  .
        1 -> 'yellow' .
    3 @ 4 -> 'white'  .
   #(1 2) -> 'red' } asDictionary
Run Code Online (Sandbox Code Playgroud)