是否有任何Smalltalk方言在
行上实现Object >> #andThen: aCollection do: aBlock
self value: aBlock.
aCollection do: aBlock
我问的原因是因为这种模式出现在这里和那里,我总是花时间思考是否要创建一个新的集合然后#do:,或者是否为了效率而在客户端内联代码。
更新
以下是元素不在集合中的情况示例。
您有一个字符串列表和一个标题:
FOOD
nuts
apples
seeds
beans
tomatoes
algae
mushrooms
sprouts
你正在尝试用它们做点什么。假设你想要计算最大宽度,或者你想在屏幕上显示它们等等。
标题不属于集合,但对于我们想要对它们执行的一些操作,我们需要同时考虑标题和项目。
答案 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