2011-06-30 56 views
4

我可以在smalltalk中實現協程嗎?協程在smalltalk中如何實現?

如果你的答案是否定的:爲什麼不呢?

或者它的是:你可以給我一個例子嗎?

+0

駕駛室你給更多解釋? –

回答

8

大多數Smalltalk中已經堆放了thisContext對象上的操作方法。你可以用這些來實現協程,儘管在這個層次上處理堆棧可能有點乏味。

GNU Smalltalk和佳樂和菲羅的最新版本還提供了一個生成器類,可以很容易地編寫發生器(即產生多個值類型的協程):

"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

+0

你知道嗎?發電機的實施也可用於Pharo 1.3? –

+1

@Davorin不,但有[開放的問題,包括他們](http://code.google.com/p/pharo/issues/detail?id=3527)。 –

+0

發電機已進入Pharo 1.4。將Pharo添加到答案中。 –