如何在 Smalltalk 中复制最多 n 个集合元素?

How to copy at most n collection elements in Smalltalk?

是否有优雅的一行代码最多复制一个集合中的 n 个元素?

我觉得写下面的东西很麻烦:

limit := collection size min: n.
copy := collection copyTo: limit

有没有更好的方法?

编辑 - 还有一个更难的问题:最多复制 last n 个元素

不确定是否已经有完全符合他的方法,但您可以添加一个:

SequenceableCollection>>#copyAtMost: n
   ^ self first: (self size min: n)

那么你可以拥有:

collection := 1 to: 100.
collection copyAtMost: 101

没有专门的消息,但为什么没有:

aCollection first: (aCollection size min: n)

aCollection last: (aCollection size min: n)

还有流消息:

'foobar' readStream next: 3.
'foobar' readStream next: 10.

在Squeak/Pharo中使用next:,当没有请求的可用元素时,它会自动截断。

在 VW 和 Dolphin 等其他方言中,使用更明确的 nextAvailable: 以避免错误。