2013-08-28 94 views

回答

27

這個工作對我來說:

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

這是基本相同的圍棋,但需要括號。

+0

最好的解決方案,我沒有嘗試過。看來,我們不得不使用元組來模擬它。謝謝! – sunny2016

+3

Go也需要括號。 ;) – weberc2

+2

不,他們不是。 (他正在談論return語句。) – Timmmm

15

生鏽,你可以用一個以上的值返回一個元組:

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

語言返回不止一個值可能與一個元組或其它數據結構,因爲在大多數調用約定的返回值仿效此只有一個寄存器。

不能告訴Go,但它們很可能只是模擬一個元組內的多個值,並且編譯時迫使您管理返回值。

由於這是ocaml或haskell(和其他人)如何管理它,並且他們在返回值(或元組)中強制進行類型檢查,所以出現問題的可能性很低,所以我沒有看到生鏽的問題。管理返回值的最常見方法是在兩個或多個綁定中解構元組(let a, b = tuple_2())。

只要我兩分錢,隨時糾正我。

+3

只是精度:Go不使用元組,但真正使用多個寄存器。請參閱http://stackoverflow.com/questions/18622706/what-exactly-is-happening-when-go-returns-multiple-values –

+5

自1.2.0起,語法需要爲'let(a,b)= tuple_2();' – Amol

5

生鏽,你不必使用回報關鍵字:

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

不回答這個問題(解決方案的重要部分是需要包括括號),但值得記住/提醒人們Rust是一個基於表達式的語言返回。 – zstewart