2008-10-20 4 views
2

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

Когда я пишу [#foo], то есть BlockContext, в чем заключена сделка?

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

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

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

ответ

7

Как правило, с Приморским морем вам никогда не придется иметь дело с Continuations самостоятельно.

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

Если вы пытаетесь сделать что-то еще с Continuation, кроме написания приложения «Приморский», посмотрите пример использования 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 отображается в протоколе, поскольку каждое значение вы передаете #value: вызывает контекст продолжения, подлежащего восстановлению, и нового значения, присвоенного result.

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

+0

Будет ли Julian обновлять это для Seaside 3.0? – mozillanerd 2012-09-05 03:03:37

Смежные вопросы