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

Zak*_*ria 4 smalltalk coroutine

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

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

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

Ale*_*min 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]
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/7zWTx