Rust是否支持返回多个值的函数?

时间:2013-08-28 04:47:08

标签: rust

Rust是否支持返回多个值的函数,如Go?

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

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

4 个答案:

答案 0 :(得分:42)

这对我有用:

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

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

答案 1 :(得分:20)

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

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

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

无法讲述Go,但很有可能他们只是在元组内部模拟多个值,编译时强迫您管理返回。

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

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

答案 2 :(得分:8)

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

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

答案 3 :(得分:4)

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

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

let (a, b) = addsub(1, 2);