2008-10-20 9 views
2

Comment obtenir un BlockClosure dans Squeak (je veux utiliser BlockClosure >> callCC)? Quand j'écris [#foo] qui est un BlockContext, quel est le problème?Travailler avec les suites Seaside

Mise à jour: J'ai compris que BlockClosure est une chose principalement de nouveau compilateur.

Au lieu de cela, comment puis-je travailler avec les Continuations balnéaires? J'ai des problèmes, et tous les exemples seraient appréciés. Mise à jour supplémentaire: Le but de ceci n'est pas d'utiliser balnéaire (du moins pas directement), mais plutôt d'écrire des traversées et d'autres choses d'une manière plus facile que de lancer mes propres itérateurs de suivi d'état.

Répondre

7

Normalement, avec Seaside, vous n'avez jamais à vous occuper des Continuations. Vous venez d'utiliser #call: et #answer: dans vos composants.

Si vous essayez de faire autre chose avec Continuation autre que d'écrire une application Seaside, jetez un oeil à WAComponent>>call: pour un exemple d'utilisation.

Ou essayez ceci. Ouvrez une fenêtre de transcription. Maintenant, dans un espace de travail, sélectionnez tout ce code à la fois et Do-it:

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

Transcript show: result. 

Vous devriez voir 1 affiché dans la fenêtre Transcript. Maintenant, dans l'espace de travail, faites:

continuation value: 2 

puis:

continuation value: 3 

Vous devriez voir chaque valeur que vous passez à continuation affichée dans la transcription parce que chaque valeur que vous passez à #value: provoque le contexte de la poursuite à restaurer et la nouvelle valeur affectée à result.

Espérons que cela aide ...

+0

Est-ce que Julian voudrait mettre à jour ça pour Seaside 3.0? – mozillanerd