Frage

Interessierte an dem Konzept der Fortsetzung begann ich, Wikis zu lesen, Beiträge und kam zu diesem "einfachen" Beispiel:

reset {
  ...
  shift { k: (Int=>Int) =>  // the continuation k will be the '_ + 1' below
    k(7)
  } + 1
}
// result: 8

Ohne Wissen über Scala bin ich hier völlig verloren und könnte nicht herausfinden, wie die 8 herauskommt.

Unten ist, wie ich versucht habe, die Bedeutung herauszufinden, aber fehlgeschlagen. Jeder Kerl, den Sie mir bitte eine kurze Erklärung geben können? Ja, es gibt Scala -Grammatikbücher, aber sie sind zu dick, ich bin mehr daran interessiert, ein abgrenzendes Fortsetzungskonzept zu verstehen als die Master Scala -Sprache ...

  • (Int=>Int)

    Sieht aus wie ein C# -Delegierter, Eingang ist int, die Ausgabe ist int.

  • k: (Int=>Int) => k(7)

    Ich bin hier verloren ... was ist K und was ist (int => int) => k (7)?

  • shift { k: (Int=>Int) => k(7) } + 1

    Noch mehr verloren ...

  • reset { ...; shift { k: (Int=>Int) => k(7) } + 1 }

    Sogar noch immer verlorener ...

War es hilfreich?

Lösung

Ich fand das Vortrag von Chris League "Monadologie: Professionelle Hilfe für Typenstürme" (http://vimeo.com/13304075) enthält eines der besseren Beispiele für eine abgegrenzte Fortsetzung.

Andere Tipps

fotnelton, vielen Dank! Alex Neths Antwort im Link hat mir geholfen. Jetzt glaube ich, dass ich es verstanden habe. Lassen Sie mich meine eigene Frage beantworten, um sie als Notiz zu veröffentlichen.

Grammatik von Reset und Verschiebung:

reset {
  ...
  shift { cf: (InputParameterType => OutpututParameterType) =>
     CodeBlockInsideShift
  } 
  CodeBlockAfterShiftBeforeEndOfReset
}

Es bedeutet tatsächlich, im C# -Stil -Pseudocode:

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top