我试图通过一个数组并将该数组中的字符添加到另一个对象。问题是我不断收到错误“字符实例不可索引”。但是,当我在 do 块之外运行 tag := tag,char 时,它就可以工作了。
|data startTag tag|.
data := '123456778'
startTag := false.
tag := ''.
data asArray do: [:char |
tag := tag,char]
我试图通过一个数组并将该数组中的字符添加到另一个对象。问题是我不断收到错误“字符实例不可索引”。但是,当我在 do 块之外运行 tag := tag,char 时,它就可以工作了。
|data startTag tag|.
data := '123456778'
startTag := false.
tag := ''.
data asArray do: [:char |
tag := tag,char]
被,
定义为
Collection>>, aCollection
^self copy addAll: aCollection; yourself
这样就可以尝试对您的单个角色进行操作,就好像它是一个集合一样。这解释了错误。
对于较大的集合,您不想建立使用,
,因为每次都会发生副本。因此使用流式传输协议:
|data tag|
data := '123456778'.
tag := String streamContents: [:s |
data do: [ :char |
s nextPut: char]]
另请查看在Collection>>do:separatedBy:
数据之间添加分隔符。
[编辑] 啊,好吧,这有点像
|data tag tags state|
data := '<html>bla 12 <h1/></html>'.
state := #outside.
tags := OrderedCollection new.
tag := ''.
data do: [ :char |
state = #outside ifTrue: [
char = $< ifTrue: [
state := #inside.
tag := '' ]]
ifFalse: [
char = $> ifTrue: [
state := #outside.
tags add: tag]
ifFalse: [ tag := tag, (char asString)]]].
tags
"an OrderedCollection('html' 'h1/' '/html')"