Rust是否像Go一样原生支持返回多个值的函数?
func addsub(x, y int) (int, int) {
return x + y, x - y
}
看起来我们可以使用元组来模拟它。 Rosetta Code介绍了如何在不同的编程语言中返回多个值,但我没有看到Rust。
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 是否也是这样,但很有可能他们只是在元组中模拟多个返回值,并在编译时强制你管理返回值。
我认为 Rust 这样做没有问题,因为 OCaml 或 Haskell(和其他语言)都是这样处理的,他们在返回值(或元组)中执行类型检查,所以出错的机会很低。最常见的管理返回值的方法是将元组解构成两个或更多绑定 (let (a, b) = tuple_2();
)。
这只是我的一点建议,欢迎指正。
let (a, b) = tuple_2();
。 - Amol这是一个示例,展示了如何将返回的元组轻松分配给单独的变量。
fn addsub(x: isize, y: isize) -> (isize, isize) {
(x + y, x - y) // use tuple to simulate it
}
let (a, b) = addsub(1, 2);
fn addsub(x: isize, y:isize) -> (isize, isize) {
(x + y, x - y) // use tuple to simulate it
}
return ;
语句。 - legends2k