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

问题描述 投票:38回答:4

Rust是否对返回多个值(例如Go)的函数具有本机支持?

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

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

rust
4个回答
48
投票

这对我有用:

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

与Go中的基本相同,但需要括号。


23
投票

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

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

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

无法告知Go,但是很有可能它们只是在元组中模拟多个值,并且在编译时迫使您管理返回值。

我看不到生锈的问题,因为这是OCaml或Haskell(及其他)如何管理它的方法,并且他们在返回值(或元组)中执行类型检查,因此发生问题的几率很低。管理返回值的最常见方法是在两个或更多绑定(let (a, b) = tuple_2();)中解构元组。

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


8
投票

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

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

6
投票

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

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

let (a, b) = addsub(1, 2);
© www.soinside.com 2019 - 2024. All rights reserved.