Работа с Приморскими продолжениями - PullRequest
2 голосов
/ 21 октября 2008

Как мне получить BlockClosure в Squeak (я хочу использовать BlockClosure >> callCC)?

Когда я пишу [#foo], который является BlockContext, в чем дело?

Обновление: я выяснил, что BlockClosure - это вещь в основном нового компилятора.

Вместо этого, как мне работать с Приморскими Продолжениями? У меня проблемы, и любые примеры будут оценены.

Дальнейшее обновление: цель этого состоит не в том, чтобы использовать побережье (по крайней мере, не напрямую), а в том, чтобы писать обходы и другие подобные вещи так, чтобы это было проще, чем использовать собственные итераторы для отслеживания состояния.

1 Ответ

7 голосов
/ 21 октября 2008

Обычно с Seaside вам никогда не приходится иметь дело с Continuations самостоятельно.

Вы просто используете #call: и #answer: внутри своих компонентов.

Если вы пытаетесь сделать что-то еще с Continuation, кроме написания приложения Seaside, посмотрите на WAComponent>>call: пример использования.

Или попробуйте это. Откройте окно Transcript. Теперь, в рабочей области, выделите весь этот код сразу и сделайте это:

continuation := nil.
result := Continuation currentDo: [:cc |
   "store the continuation, cc, somewhere for later use"
   continuation := cc.
   1 ].

Transcript show: result.

Вы должны увидеть 1, отображаемое в окне Transcript. Теперь в рабочей области выполните:

continuation value: 2

, а затем:

continuation value: 3

Вы должны видеть, что каждое значение, которое вы передаете continuation, отображается в Transcript, потому что каждое значение, которое вы передаете #value: вызывает восстановление контекста продолжения и новое значение, присвоенное result.

Надеюсь, это поможет ...

...