是否有任何枚举对象然后集合的方法?

时间:2016-04-16 18:20:52

标签: smalltalk

是否有任何Smalltalk方言在

行上实现
Object >> #andThen: aCollection do: aBlock
  self value: aBlock.
  aCollection do: aBlock

我问的原因是因为这种模式出现在这里和那里,我总是花时间思考是否要创建一个新的集合然后#do:,或者是否为了效率而在客户端内联代码。

更新

以下是元素不在集合中的情况示例。

您有一个字符串列表和一个标题:

FOOD
 nuts
 apples
 seeds
 beans
 tomatoes
 algae
 mushrooms
 sprouts

你正在尝试用它们做点什么。假设你想要计算最大宽度,或者你想在屏幕上显示它们等等。

标题不属于集合,但对于我们想要对它们执行的一些操作,我们需要同时考虑标题和项目。

4 个答案:

答案 0 :(得分:2)

这个怎么样?

{ self }, aCollection do: aBlock

您还可以更明确地说明这一点:

(aCollection copyWithFirst: self) do: aBlock

答案 1 :(得分:1)

最初的问题是,“这是一个好主意吗?” 并提供一些代码。

是的,这是一个好主意,但有一个错字 因为它的第二行是倒退的。

这是更正后的版本 (只是纠正原问题中的拼写错误。)

>>andThen: aCollection do: ablock
    ablock value: self.
    ^aCollection do: ablock

下一步:

我之前的回答也有拼写错误 需要更好的评论。

所以这是该版本的更正版本(9/11/16的答案)。

"
 This version also works for
   any combination of parameters,
   and in any order.
" 
>>andThen: anotherObject do: a1block
    self do: a1block.
    ^anotherObject do: a1block

注意:以上内容取决于另一个定义,
      可能不会出现在您的图片中。

对象还需要定义#do:,如下所示......

Object>>do: a1block
    ^a1block value: self

答案 2 :(得分:0)

如果食物是词典条目及其相关集合的关键怎么办?

答案 3 :(得分:0)

现在确实 - 谢谢。 略有改变 - 对称实现

>>andThen: anotherObject do: a1block
    self do: a1block.
    ^anotherObject do: aCollection