1

这基本上是我想做的(我已经实现了 Stream 子类WordStream):

| aStream |
aStream := WordStream on: 'Test My Word Stream Class!'.
self assert: (aStream next) = 'Test'.
self assert: (aStream next) = 'My'.
self assert: (aStream next) = 'Word'.
self assert: (aStream next) = 'Stream'.
self assert: (aStream next) = 'Class'.
self assert: aStream atEnd

我已将所有内容正确存储在我的流中,但我只能通过以下方式弄清楚如何获取下一个单词:

next
    |tmpStream|
    tmpStream := ReadStream on: myStream contents.
    ^tmpStream nextDelimited: Character space.

这仅适用于第一个单词(显然)-当我尝试使用我的实例变量myStream时,它只是不断返回''。

即,我不能让它工作:

next
   ^myStream nextDelimited: Character space.

有人可以帮我一把吗?


编辑:

这就是我实施的方式on:

on: inString
    |tmpStream|
    myStream := ReadWriteStream on: String new.
    tmpStream := ReadStream on: inString.

    [ tmpStream atEnd ] whileFalse: [ myStream nextPutAll: (tmpStream nextDelimited: Character space); nextPut: $ ].
4

1 回答 1

1

PositionableStream已经定义#nextDelimited:,但使用#next. 您可以做的一件相当可怕的事情是 copyPositionableStream >> #nextDelimited:的实现,并self next用您自己的 get-a-single-character 方法替换调用。

于 2013-06-20T11:56:27.847 回答