Question

Plus d'infos sur le concept de continuation, j'ai commencé la lecture de wikis, des postes et est venu à cet exemple "simple":

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

Sans connaissance de la Scala, je suis totalement perdu ici, ne pouvait pas comprendre comment le 8 sort.

Voici comment j'ai essayé de comprendre le sens, mais a échoué. Tout homme peut vous donner une s'il vous plaît me brève explication? Oui il y a des livres de grammaire Scala, mais ils sont trop épais, je suis plus intéressé par la compréhension concept de continuité délimité que maître langue Scala ...

  • (Int=>Int)

    On dirait un délégué C #, est entrée Int, la sortie est Int.

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

    Je suis perdu ici ... ce qui est k, et ce qui est (Int => Int) => k (7)?

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

    Encore plus perdu ...

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

    Même plus en plus perdu ...

Était-ce utile?

La solution

J'ai trouvé le discours de Chris League, "Monadologie: aide professionnelle pour le type d'anxiété" ( http://vimeo.com/13304075 ) contient l'un des meilleurs exemples d'une continuation délimitée.

Autres conseils

fotNelton, merci beaucoup! La réponse d'Alex Neth dans le lien m'a aidé. Maintenant, je pense que je l'ai eu. Permettez-moi de répondre à ma propre question à points sur le bas comme une note.

Grammaire de remise à zéro et le décalage:

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

En fait, il signifie, en C # code pseudo de style:

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top