Domanda

Interessato al concetto di continuazione, ho iniziato a leggere wiki, post e sono arrivato a questo esempio "semplice":

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

Senza conoscenza di Scala, sono totalmente perso qui, non sono riuscito a capire come uscirà l'8.

Di seguito è come ho cercato di capire il significato ma fallito. Qualche ragazzo potresti darmi una breve spiegazione? Sì, ci sono libri di grammatica Scala ma sono troppo spessi, sono più interessato a comprendere il concetto di continuazione delimitato rispetto al linguaggio di Master Scala ...

  • (Int=>Int)

    Sembra un delegato C#, l'input è int, l'output è int.

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

    Mi sono perso qui ... che cos'è K e cos'è (int => int) => k (7)?

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

    Ancora più perso ...

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

    Ancora sempre più perso ...

È stato utile?

Soluzione

Ho trovato il discorso di Chris League, "Monadologie: Aiuto professionale per l'ansia da tipo" (http://vimeo.com/13304075) contiene uno dei migliori esempi di una continuazione delimitata.

Altri suggerimenti

Fotnelton, grazie mille! La risposta di Alex Neth nel link mi ha aiutato. Ora penso di averlo capito. Lasciami rispondere alla mia domanda per declinare come nota.

Grammatica di reset e shift:

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

In realtà significa, nel codice pseudo in stile C#:

public delegate OutpututParameterType CFDelegate(InputParameterType);

CFDelegate cf = CodeBlockAfterShiftBeforeEndOfReset;

CodeBlockInsideShift;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top