Как сопрограммы реализованы в Smalltalk? - PullRequest
4 голосов
/ 30 июня 2011

Могу ли я реализовать сопрограммы в smalltalk?

Если ваш ответ отрицательный: почему бы и нет?

Или, если да, можете ли вы привести пример?

1 Ответ

8 голосов
/ 30 июня 2011

Большинство 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]
...