您可以返回一个枚举:
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 either
crate 简化了这种方法:
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())
}
}
操场