Pharo 3中文字和动态数组之间的区别

Kil*_*lon 5 arrays smalltalk dynamic literals pharo

阅读Pharo(Pharo By Example)的文档,第一个区别在于数组的制作方式.

文字将遵循此语法

myArray := #(1 2 3)
Run Code Online (Sandbox Code Playgroud)

而动态数组用

myArray := {1+2 . 4-2 . 3 }
Run Code Online (Sandbox Code Playgroud)

文字数组将直接获取值,包含数字,字符串和布尔值.动态数组将接收完整的消息,这些消息将编译并将其返回值插入到数组中.

这两者之间还有其他区别吗?如果动态数组可以执行文字数组的操作,为什么存在文字数组?

Uko*_*Uko 6

动态数组{ 1 + 2 . 4 - 2 . 3 }基本上是一个语法糖:

Array
  with: 1 + 2;
  with: 4 - 2;
  with: 3
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为数组是经常创建的.您也可以将其合并以创建字典,例如:

{
  #keyOne   -> 5 .
  #keyTwo   -> 3 .
  #keyThree -> 1
} asDictionary
Run Code Online (Sandbox Code Playgroud)

文字数组实际上是文字的,并在编译时定义.


Stu*_*ing 5

文字数组是标准的 Smalltalk 语法,动态数组是 Squeak(因此也是 Pharo)的扩展。我相信类似的语法存在于其他 Smalltalks 中,但并不通用。

所以文字数组存在的原因是因为它们总是存在 - 它们是 Smalltalk 80 的一部分。除了语法和计算它们时,我认为没有任何其他区别 - 我相信它们都导致相同的类型,只是它们的初始化方式不同。