阅读Pharo(Pharo By Example)的文档,第一个区别在于制作数组的方式。
文字将遵循此语法
myArray := #(1 2 3)
使用
的动态数组myArray := {1+2 . 4-2 . 3 }
文字数组将直接获取值,包含数字,字符串和布尔值。动态数组将接收完整的消息,这些消息将编译并将其返回值插入到数组中。
这两者之间还有其他区别吗?如果动态数组可以执行文字数组的操作,为什么存在文字数组?
答案 0 :(得分:6)
像{ 1 + 2 . 4 - 2 . 3 }
这样的动态数组基本上是一个语法糖:
Array
with: 1 + 2;
with: 4 - 2;
with: 3
这是有道理的,因为数组是经常创建的。您也可以将其合并以创建字典,例如:
{
#keyOne -> 5 .
#keyTwo -> 3 .
#keyThree -> 1
} asDictionary
文字数组实际上是文字的,并在编译时定义。
答案 1 :(得分:4)
文字数组是标准的Smalltalk语法,动态数组是Squeak(因此也是Pharo)扩展。我相信其他Smalltalks中存在类似的语法,但它并不普遍。
所以文字数组存在的原因是因为它们总是有 - 它们是Smalltalk 80的一部分。除了语法和它们被评估时,我认为没有任何其他差异 - 我相信它们都会导致相同类型的对象,只是它们的初始化方式不同。