gpt4 book ai didi

Smalltalk Pharo 字符串连接而不是流

转载 作者:行者123 更新时间:2023-12-04 06:48:14 26 4
gpt4 key购买 nike

为什么会出现以下代码:

| list types |
list := Heap new.
types := #('a' 'b' 'c').
types do:[ :t |
1 to:9 do:[ :i |
list add:(t, i asString).
].
].
^ list

发出 String concatenation instead of streams Pharo 方法中的警告?
单击 [ ? ] 按钮显示:

String concatenation instead of streams
Check for code using string concatenation inside some iteration message.



我正在做一些可以通过流更容易完成的事情吗?我想要实现的是创建所有值的列表 a1 a9 , b1 b9 c1 c9 .

最佳答案

它提示是因为部分 t, i asString这是在集合循环内(您可以查看类 RBStringConcatenationRule 中规则的实际实现。

通常不鼓励字符串连接,因为它更慢且内存更密集(关于内存的 IIRC)。

因此,如果您正在进行一些重串联(将许多部分连接成一个字符串),最好使用流:您最多可以查看 printOn:系统中的方法来查看它的运行情况。

然而,在琐碎的情况下与 , 串联很好,警告规则太宽泛了。警告只是……警告某些事情可能是错误的,或者某些事情可能会写得更好。

说到更好的写作,在 Smalltalk 中最好使用专门的收集方法( select:collect: ,...)而不是过于通用的 do: ,例如

| list types |
types := #('a' 'b' 'c').
list := types flatCollect: [ :t | (1 to: 9) collect: [ :i | t , i asString ].
^ Heap withAll: list

(如果您不需要 Heap,您可以直接返回第三行而不需要 list tempvar。

关于Smalltalk Pharo 字符串连接而不是流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40426304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com