Работа с Приморскими продолжениями
-
03-07-2019 - |
Вопрос
Как получить BlockClosure в Squeak (я хочу использовать BlockClosure > > callCC)?
Когда я пишу [#foo], который является BlockContext, в чем дело?
Обновление: я выяснил, что BlockClosure - это в основном новый компилятор.
Вместо этого, как мне работать с Приморскими Продолжениями? У меня проблемы, и любые примеры будут оценены.
Дальнейшее обновление: цель этого состоит не в том, чтобы использовать побережье (по крайней мере, не напрямую), а в том, чтобы писать обходы и другие подобные вещи так, чтобы это было проще, чем использовать собственные итераторы для отслеживания состояния.
Решение
Обычно в 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
Вы должны увидеть, что каждое значение, которое вы передаете в продолжение
, отображается в стенограмме, потому что каждое значение, которое вы передаете в #value: вызывает восстановление контекста продолжения и новое значение, назначенное для результат код>.
Надеюсь, это поможет ...