Rust 中的多种返回类型[重复]

2023-12-07

我有一个库函数f1 in rust返回一个字符串并想要更新它以选择性地返回一个向量。

fn f1() -> String {
   "abc"
}

fn f2() -> (String, Vec<usize>) {
   "abc", vec![(0, 1, 2)]
}

fn f3(flag: bool) -> ? {
    if (flag)
        "abc", vec![(0, 1, 2)]
    else
        "abc"
}

是否可以有多个返回路径,例如f3?


您可以返回一个枚举:

enum StrOrStrAndVec<'a> {
    Str(&'a str),
    StrAndVec(&'a str, Vec<usize>),
}

fn f3(flag: bool) -> StrOrStrAndVec<'static> {
    if flag {
        StrOrStrAndVec::StrAndVec("abc", vec![0, 1, 2])
    } else {
        StrOrStrAndVec::Str("abc")
    }
}

The eithercrate 简化了这种方法:

use either::*;

fn f3(flag: bool) -> Either<&'static str, (&'static str, Vec<usize>)> {
    if flag {
        Right(("abc", vec![0, 1, 2]))
    } else {
        Left("abc")
    }
}

或者,在这种情况下您可以使用Option:

fn f3(flag: bool) -> (&'static str, Option<Vec<usize>>) {
    if flag {
        ("abc", Some(vec![0, 1, 2]))
    } else {
        ("abc", None)
    }
}

然而,自从Vec::new()不分配内存,返回空Vec同样有效:

fn f3(flag: bool) -> (&'static str, Vec<usize>) {
    if flag {
        ("abc", vec![0, 1, 2])
    } else {
        ("abc", Vec::new())
    }
}

操场

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 中的多种返回类型[重复] 的相关文章

随机推荐