覆盖Streams中的“next”

时间:2013-06-19 03:45:50

标签: smalltalk

这基本上是我想要做的(我已经实现了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: $ ].

1 个答案:

答案 0 :(得分:1)

PositionableStream已定义#nextDelimited:,但使用#next。你可以做的一件非常可怕的事情是复制PositionableStream >> #nextDelimited:的实现,并用你自己的get-a-single-character方法替换self next调用。