2015-01-09 2 views
6

Angenommen, wir die folgende Sequenz von Methoden haben:Was ist die Semantik der Rückkehr von Block innerhalb gesicherter Blöcke?

m1 
    self m2: [^1] 

m2: block 
    self m3: block. 
    Processor := nil "crash!" 

m3: block 
    [block value] ensure: [^2] 

Die Frage ist, was der Wert von anObject m1 ist?

Mit anderen Worten, ist die Semantik von [ˆ2] gut als ein gesicherter Block definiert? Es gibt zwei Möglichkeiten:

  1. Die Rückkehr aus dem Block in sicherten Blöcken ignoriert: In diesem Fall m1 mit 1 zurück.
  2. Die Rückkehr von Block wird in gewährleisteten Blöcken geehrt: In diesem Fall wird das Bild abstürzen.

Bitte beachten Sie, dass ich nicht frage, was passieren wird. Ich bin eher an der Definition des Ausführungsflusses interessiert.


EDIT

FOLGE 1 (wie in seiner Antwort unten durch Lukas bestätigt): Kein guter Programmierstil!

Antwort

4

prüfen Seite 23 des Draft of ANSI Smalltalk Standard, die die Return-Anweisung und seine Wechselwirkung mit ensure: Blöcke beschreibt:

Wenn die Auswertung eines Abschlussblock mit der Ausführung einer return-Anweisung schließt das Ergebnis nicht definiert ist.

Verwandte Themen