为什么会有以下代码:
| list types |
list := Heap new.
types := #('a' 'b' 'c').
types do:[ :t |
1 to:9 do:[ :i |
list add:(t, i asString).
].
].
^ list
Run Code Online (Sandbox Code Playgroud)
String concatenation instead of streams在Pharo的方法中发出警告?点击[ ?]按钮显示:
字符串连接而不是流
在某些迭代消息中使用字符串连接检查代码.
我是否正在做一些可以通过流更容易完成的事情?我想实现的是创建一个列表的所有值的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
Run Code Online (Sandbox Code Playgroud)
(如果你不需要,Heap你可以直接返回第三行而不是listtempvar.
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |