use*_*211 2 types rust linear-search
我想知道是否可以根据函数中的条件返回不同的类型:如果删除'||,此代码将起作用 bool'和'if/else'语句.
提前致谢.
fn main() {
let vector: Vec<i32> = vec![0, 2, 5, 8, 9];
let targetL i32 = 3;
let found_item = linear_search(vector, target);
println!("{}", &found_item);
}
fn linear_search(vector: Vec<i32>, target: i32) -> i32 || bool {
let mut found: i32 = 0;
for item in vector {
if item == target {
found = item;
break
}
}
if found == 0 {
false
} else {
found
}
}
Run Code Online (Sandbox Code Playgroud)
必须在编译时知道精确类型(并随后擦除).您无法任意决定在运行时返回哪些类型.
但是,您可以尝试将类型包装到通用枚举中(替换||代码中):
enum TypeOr<S, T> {
Left(S),
Right(T),
}
fn linear_search(vector: ...) -> TypeOr<i32, bool> { //...
Run Code Online (Sandbox Code Playgroud)
缺点是您必须先从枚举中解开值,然后才能对结果执行任何其他操作.但是,这在实践中并不是那么艰巨.
这基本上是常用Option和Result类型的通用版本.
编辑:事实上,在你的情况下,你通过Option类型的语义非常好地服务:你永远不会返回true,所以你可以将None结果等同于false你的函数返回的结果,这捕获了你想要表达的想法:您的线性搜索找到目标并返回它(Some(found)),或者它没有,并且没有任何返回(None).
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |