2013-08-28 24 views

risposta

27

questo funziona per me:

fn addsub(x: isize, y: isize) -> (isize, isize) { 
    return (x + y, x - y); 
} 

E 'fondamentalmente lo stesso come in Go, ma sono necessarie le parentesi.

+0

la soluzione migliore, non l'ho provato prima. Sembra che abbiamo dovuto usare la tupla per simularlo. Grazie! – sunny2016

+3

Le parentesi sono obbligatorie anche in Vai. ;) – weberc2

+2

No, non lo sono. (Stava parlando dell'istruzione 'return'). – Timmmm

15

A Rust è possibile restituire una tupla con più di un valore:

fn my_func() -> (u8, bool) { 
    (1, true) 
} 

Un linguaggio di tornare più di un valore non è probabilmente emulando questo con una tupla o di un'altra struttura di dati, come nella maggior parte delle convenzioni di chiamata del valore di ritorno è in un solo registro.

Non si può parlare di Go, ma ci sono alte probabilità che stiano semplicemente emulando i valori multipli all'interno di una tupla e in fase di compilazione obbligandoti a gestire i ritorni.

Non vedo alcun problema con la ruggine, questo è il modo in cui ocaml o haskell (e altri) lo gestiscono, e applicano il controllo del tipo nei valori di ritorno (o tupla), quindi è probabile che qualcosa vada male. Il modo più comune per gestire i valori di ritorno è la decostruzione della tupla in due o più associazioni (let a, b = tuple_2()).

Solo i miei due centesimi, sentiti libero di correggermi.

+3

Solo una precisione: Go non fa uso di un tupple ma in realtà utilizza registri multipli. Vedi http://stackoverflow.com/questions/18622706/what-exactly-is-happening-when-go-returns-multiple-values ​​ –

+5

come da 1.2.0, la sintassi deve essere "let (a, b) = tuple_2(); ' – Amol

5

In Ruggine non c'è bisogno di utilizzare la ritorno parola chiave:

fn addsub(x: isize, y:isize) -> (isize, isize) { 
    (x + y, x - y) // use tuple to simulate it 
} 
+0

Non risponde alla domanda (la parte importante della soluzione è la necessità di includere la parentesi), ma vale la pena ricordare/ricordare alle persone che Rust è un linguaggio basato su espressioni con implicito ritorno. – zstewart

Problemi correlati