Pharo是否在其标准库中具有不变的数据结构,例如地图和集合



我可能只是错过了它们,但是我似乎找不到Pharo中不变的数据结构的提及。来自功能性语言,我找到了不变的地图,并在各种场合设置了有用的地图。即使Pharo对使用突变有特殊的偏见,但如果没有人能够实施它们,我也会感到惊讶。

http://source.lukas-renggli.ch/container/上的代码实现了现代容器和迭代库;可变且不变的清单;无法定位的视图;并分类,有序和无序的集合和映射数据结构。它还使用常见的过滤,映射,扁平,分区,...操作。

我并不是声称图书馆的设计或比标准收藏库更具性能,但这无疑是进一步探索的好起点。

完全有可能有人实现这样的东西。也许将来会有一成不变的收藏作为主要图书馆的一部分。但是,就目前而言,没有这样的原因,这是一个非常简单的原因:什么?您有空,然后向无效发送消息,然后将其发送回去等等。这很有趣,它是教育意义的,而且完全没有用。这是毫无用处的,因为没有人以这种方式使用Pharo,这是一种错误的方法。我强烈建议您在Pharo中制作自己的不变收藏。

但是,在您这样做的时候,请考虑一下应该不变的以及为什么。是关于收缩还是成长?阵列就是这样 - 它们是固定的尺寸。是否无法添加/删除/交换元素?但是,如果您获得元素并修改元素怎么办?最后,考虑此示例:

array := #('a' 'b' 'c').
array first become: 'd'.
array = #('d' 'b' 'c')

我不使用任何设置器,但我仍然可以在最后一个不同的数组。

Pharo社区关心透明度和良好的设计。众所周知,您不应该直接修改收藏的内容,您不应该与外部物体的内部状态相互作用,等等……另一方面,如果您想这样做,没有人会在脸上猛击您。我的意思是,如果您原型呢?如果您入侵怎么办?如果实际上没有其他方法怎么办?您总是能够选择,问题是我们如何帮助人们学习更好的选择。

P.S。我的回答听起来不变并不重要。事实并非如此。甚至还有只读对象的原型,可用于确保一定程度的安全性。提出一个可以适用于 everyther>

的单个概念并不是那么简单

最新更新