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

时间:2016-10-25 20:58:51

标签: 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

1 个答案:

答案 0 :(得分:2)

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

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

换句话说,你需要一个实际的模型对象来负责知道哪些元素属于集合,而NewModelList实例反映了这种情况,而不是NewModelList持有通过删除或添加元素来维护这样的集合,因为这是实际模型对象的工作。两个对象都指向同一个集合,但对它们负有不同的责任。