Smalltalk 如何在Pharo5中从NewList中删除项

Smalltalk 如何在Pharo5中从NewList中删除项,smalltalk,pharo,Smalltalk,Pharo,我试图从一个新列表中删除一个项目,但没有相应的方法。直接访问列表项是否安全?为什么没有removeItem:方法 | m | m := NewListModel new. m items: (1 to: 50) asOrderedCollection. m headerTitle: 'Fubu'. m setSelectedIndex: 2. m listItems remove: 3. m openWithSpec. 上述方法可以工作,但如果我有域对象,它将失败,并显示以下消息: Shoul

我试图从一个新列表中删除一个项目,但没有相应的方法。直接访问列表项是否安全?为什么没有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列表项中删除:
项目,如上面的下一句话所示。改为再次发送
m items:
消息。对于此消息的参数,让您的模型对象提供不再包含要删除的元素的项集合

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

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