Работа с продолжениями Seaside

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

Когда я пишу [#foo], это BlockContext, в чем дело?

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

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

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


person Community    schedule 20.10.2008    source источник


Ответы (1)


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

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

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

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

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, отображаемое в расшифровке, потому что каждое значение, которое вы передаете в #value:, вызывает восстановление контекста продолжения и новое значение, присвоенное result.

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

person Julian    schedule 21.10.2008