Rust是否支持返回Go等多個值的函數?Rust是否支持返回多個值的函數?
func addsub(x, y int) (int, int) {
return x + y, x - y
}
看來我們可以用一個元組來模擬它。 Rosetta Code介紹瞭如何以不同語言返回多個值,但我沒有看到Rust。
Rust是否支持返回Go等多個值的函數?Rust是否支持返回多個值的函數?
func addsub(x, y int) (int, int) {
return x + y, x - y
}
看來我們可以用一個元組來模擬它。 Rosetta Code介紹瞭如何以不同語言返回多個值,但我沒有看到Rust。
這個工作對我來說:
fn addsub(x: isize, y: isize) -> (isize, isize) {
return (x + y, x - y);
}
這是基本相同的圍棋,但需要括號。
生鏽,你可以用一個以上的值返回一個元組:
fn my_func() -> (u8, bool) {
(1, true)
}
語言返回不止一個值可能與一個元組或其它數據結構,因爲在大多數調用約定的返回值仿效此只有一個寄存器。
不能告訴Go,但它們很可能只是模擬一個元組內的多個值,並且編譯時迫使您管理返回值。
由於這是ocaml或haskell(和其他人)如何管理它,並且他們在返回值(或元組)中強制進行類型檢查,所以出現問題的可能性很低,所以我沒有看到生鏽的問題。管理返回值的最常見方法是在兩個或多個綁定中解構元組(let a, b = tuple_2()
)。
只要我兩分錢,隨時糾正我。
只是精度:Go不使用元組,但真正使用多個寄存器。請參閱http://stackoverflow.com/questions/18622706/what-exactly-is-happening-when-go-returns-multiple-values –
自1.2.0起,語法需要爲'let(a,b)= tuple_2();' – Amol
生鏽,你不必使用回報關鍵字:
fn addsub(x: isize, y:isize) -> (isize, isize) {
(x + y, x - y) // use tuple to simulate it
}
不回答這個問題(解決方案的重要部分是需要包括括號),但值得記住/提醒人們Rust是一個基於表達式的語言返回。 – zstewart
最好的解決方案,我沒有嘗試過。看來,我們不得不使用元組來模擬它。謝謝! – sunny2016
Go也需要括號。 ;) – weberc2
不,他們不是。 (他正在談論return語句。) – Timmmm