smalltalk - 如何从 Pharo 5 的 NewList 中删除项目

标签 smalltalk pharo

我尝试从 NewList 中删除项目,但没有方法可以做到这一点。直接访问列表项是否安全?为什么没有removeItem:方法?

| m |
m := NewListModel new.
m items: (1 to: 50) asOrderedCollection.
m headerTitle: 'Fubu'.
m setSelectedIndex: 2.
m listItems remove: 3.
m openWithSpec.

上面的方法有效,但如果我有域对象,它将失败并显示消息:

ShouldNotImplement: #remove:ifAbsent: should not have been implemented in Array

最佳答案

您不应该删除:来自m listItems的项目,如上面倒数第二条语句所示。请再次发送 m items: 消息。对于此消息的参数,让您的模型对象提供不再包含您要删除的元素的项目集合。

当然,如果这些元素保存在 Array 中,您将无法从中删除任何内容,并且需要提供一个新的Array 作为原始的副本,没有删除的元素。但是,如果您的模型将元素保留在 OrderedCollection 中,则只需从中删除该元素即可。

换句话说,您需要一个实际模型对象来负责了解哪些元素属于集合,以及反射(reflect)这种情况的 NewModelList 实例,而不是 NewModelList 通过删除或添加元素来保存和维护这样的集合,因为这是您的实际模型对象的工作。两个对象将指向完全相同的集合,但具有不同的职责。

关于smalltalk - 如何从 Pharo 5 的 NewList 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249591/

相关文章:

smalltalk - 我们如何在不在 Playground 上实例化对象的情况下运行 pharo 程序?

smalltalk - 延长吱吱声或 pharo

oop - 为什么在 Smalltalk 中方法默认返回 "self"?

debugging - 方案和Smalltalk

smalltalk - Rebol 和 Smalltalk 中的表达式优先级

string - squeak(smalltalk)如何使用方法 `findSubstring: in: startingAt: matchTable:`?

file - Pharo 文件系统 : setUp of SUnit test which uses a file

smalltalk - Cog VM 和间接变量访问

smalltalk - 字典到字符串

singleton - Smalltalk 单例模式 : how do I initialize the instance variables?