如何从 Pharo 5 中的 NewList 中删除项目
How to remove item from NewList in Pharo 5
我试图从 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
您不应该 remove:
来自 m listItems
的项目,如上面倒数第二个陈述中所示。改为再次发送 m items:
消息。对于此消息的参数,让您的模型对象提供不再包含您要删除的元素的项目集合。
当然,如果这些元素保存在 Array
中,您将无法 remove:
从中获取任何内容,并且需要提供一个新的 Array
作为没有删除元素的原件。但是,如果您的模型将元素保留在 OrderedCollection
中,则只需从中删除元素即可。
换句话说,您需要一个 actual 模型对象来负责了解哪些元素属于集合以及反映这种情况的 NewModelList
实例而不是 NewModelList
通过删除或添加元素来持有和维护这样的集合,因为这是您的 actual 模型对象的工作。这两个对象将指向完全相同的集合,但对其具有不同的职责。
我试图从 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
您不应该 remove:
来自 m listItems
的项目,如上面倒数第二个陈述中所示。改为再次发送 m items:
消息。对于此消息的参数,让您的模型对象提供不再包含您要删除的元素的项目集合。
当然,如果这些元素保存在 Array
中,您将无法 remove:
从中获取任何内容,并且需要提供一个新的 Array
作为没有删除元素的原件。但是,如果您的模型将元素保留在 OrderedCollection
中,则只需从中删除元素即可。
换句话说,您需要一个 actual 模型对象来负责了解哪些元素属于集合以及反映这种情况的 NewModelList
实例而不是 NewModelList
通过删除或添加元素来持有和维护这样的集合,因为这是您的 actual 模型对象的工作。这两个对象将指向完全相同的集合,但对其具有不同的职责。