62

Rust 是否对像 Go 一样返回多个值的函数提供原生支持?

func addsub(x, y int) (int, int) {
    return x + y, x - y
}

看来我们可以使用元组来模拟它。Rosetta Code介绍了如何用不同的语言返回多个值,但是我没有看到 Rust。

4

4 回答 4

83

这对我有用:

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

它与 Go 中的基本相同,但括号是必需的。

于 2013-08-29T17:09:46.140 回答
31

在 Rust 中,您可以返回一个具有多个值的元组:

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

返回多个值的语言可能会使用元组或其他数据结构来模拟它,因为在大多数调用约定中,返回值仅在一个寄存器中。

不能说 Go,但很有可能他们只是在一个元组中模拟多个值,编译时迫使你管理返回。

我认为 rust 这样做没有任何问题,因为这是 OCaml 或 Haskell(和其他人)管理它的方式,并且它们在返回值(或元组)中强制执行类型检查,因此出现问题的可能性很低。管理返回值的最常用方法是在两个或多个绑定中解构元组 ( let (a, b) = tuple_2();)。

只是我的两分钱,请随时纠正我。

于 2013-08-28T06:07:14.360 回答
20

这是一个示例,展示了如何轻松地将返回元组分配给单独的变量。

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

let (a, b) = addsub(1, 2);
于 2018-07-11T05:48:33.427 回答
11

在 Rust 中,您不必使用return关键字:

fn addsub(x: isize, y:isize) -> (isize, isize) {
    (x + y, x - y) // use tuple to simulate it
}
于 2015-10-25T15:20:16.537 回答