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

sun*_*016 39 rust

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

func addsub(x, y int) (int, int) {
    return x + y, x - y
}
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*rff 50

这对我有用:

fn addsub(x: isize, y: isize) -> (isize, isize) {
    (x + y, x - y)
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这是获得最多支持的答案,未来的 Rust 学习者很可能会在自己的工作中模仿这个答案。因此将其改为惯用的 Rust;块的返回值是它的最后一个表达式。删除了“return;”语句。 (6认同)
  • Go中也需要括号.;) (4认同)
  • 不,他们不是.(他在谈论'return`声明.) (4认同)

snf*_*snf 24

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

fn my_func() -> (u8, bool) {
    (1, true)
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 从1.2.0开始,语法必须是`let(a,b)= tuple_2();` (7认同)
  • 只是一个精度:Go不使用tupple但真正使用多个寄存器.请参阅http://stackoverflow.com/questions/18622706/what-exactly-is-happening-when-go-returns-multiple-values (5认同)

use*_*211 10

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

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

  • 不能回答这个问题(解决方案的重要部分是需要包括括号),但是值得记住/提醒人们Rust是基于表达式的隐式返回语言。 (2认同)

pau*_*ner 7

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

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

let (a, b) = addsub(1, 2);
Run Code Online (Sandbox Code Playgroud)