Rust是否对返回多个值(例如Go)的函数具有本机支持?
func addsub(x, y int) (int, int) {
return x + y, x - y
}
似乎我们可以使用元组来模拟它。 Rosetta Code介绍了如何以不同的语言返回多个值,但我没有看到Rust。
这对我有用:
fn addsub(x: isize, y: isize) -> (isize, isize) {
(x + y, x - y)
}
与Go中的基本相同,但需要括号。
在Rust中,您可以返回具有多个值的元组:
fn my_func() -> (u8, bool) {
(1, true)
}
一种返回值多的语言可能会用元组或其他数据结构来模拟它,因为在大多数调用约定中,返回值仅在一个寄存器中。
无法告知Go,但是很有可能它们只是在元组中模拟多个值,并且在编译时迫使您管理返回值。
我看不到生锈的问题,因为这是OCaml或Haskell(及其他)如何管理它的方法,并且他们在返回值(或元组)中执行类型检查,因此发生问题的几率很低。管理返回值的最常见方法是在两个或更多绑定(let (a, b) = tuple_2();
)中解构元组。
只需我的两分钱,请随时纠正我。
在Rust中,您不必使用return关键字:
fn addsub(x: isize, y:isize) -> (isize, isize) {
(x + y, x - y) // use tuple to simulate it
}
这是一个示例,展示了如何轻松地将返回元组分配给单独的变量。]>
fn addsub(x: isize, y: isize) -> (isize, isize) {
(x + y, x - y) // use tuple to simulate it
}
let (a, b) = addsub(1, 2);