2013-04-10 13 views

risposta

3

hai già le risposte, ma qui va.

Pensa a un canale come a una coda di messaggi.

Se il canale si trova sulla destra della freccia sinistra (< -), significa deselezionare una voce. Salvare la voce in una variabile è opzionale

e <- q 

Se il canale si trova a sinistra dell'operatore freccia sinistra, significa accodare una voce.

q <- e 

Ulteriori nota su "dequeue" (ricezione) senza memorizzare in una variabile: può essere utilizzato su una coda non tamponata per implementare qualcosa di simile a un "wait/notify" operazione in Java: Si coroutine è bloccato in attesa di dequeue/ricezione di un segnale, poi un'altra coroutine accoda/invia quel segnale, il cui contenuto non è importante.(in alternativa, il mittente potrebbe essere bloccato fino a quando il destinatario non estrae il messaggio)

11

<- viene utilizzato in più di un posto nella specifica lingua:

Channel types:

L'operatore <- specifica la direzione del canale, inviare o ricevere. Se non viene data alcuna direzione, il canale è bidirezionale. Un canale può essere limitato solo per inviare o solo per ricevere per conversione o assegnazione.

Receive operator:

Per un operando ch di tipo di canale, il valore della operazione di ricezione <-ch è il valore ricevuto dal canale ch. Il tipo del valore è il tipo di elemento del canale. L'espressione blocca fino a quando un valore è disponibile. Ricevere da un canale nullo blocca per sempre. La ricezione da un canale chiuso ha sempre successo, restituendo immediatamente il valore zero del tipo di elemento.

Send statements:

Una dichiarazione di invio invia un valore su un canale. L'espressione del canale deve essere di tipo di canale e il tipo di valore deve essere assegnabile al tipo di elemento del canale.

SendStmt = Channel "<-" Expression . 
Channel = Expression . 

L'operatore riceverà è anche una parte fondamentale della select statement

+0

La freccia fornisce un suggerimento sulla direzione del flusso di dati. Personalmente, preferisco la sintassi Occam-Pi di? per l'input invece di <-ch (? hints all'interrogazione del canale) e! per output invece di ch <- (! hint al comando del canale) –

+1

Mi chiedo perché la freccia punta sempre a sinistra. Perché non hanno usato <- and ->? – marcus

Problemi correlati