如何在smalltalk中实现协同程序?

时间:2011-06-30 04:01:28

标签: smalltalk coroutine

我可以在smalltalk中实现协同程序吗?

如果你的答案是否定的:为什么不呢?

或者如果是的话:你能举个例子吗?

1 个答案:

答案 0 :(得分:8)

大多数Smalltalk在thisContext对象上都有堆栈操作方法。您可以使用这些来实现协同程序,尽管在此级别处理堆栈可能会有点单调乏味。

GNU Smalltalk和最新版本的Squeak和Pharo也提供了一个Generator类,可以很容易地编写生成器(即产生多个值的协程类型):

"This generator yield an infinite sequence of 1"
generator := Generator on: [ :gen | [ gen yield: 1 ] repeat ].

(1 to: 100) do: [:i | Transcript show: (generator next printString); cr]

http://ideone.com/7zWTx