Rust 不是所有控制路径都返回值吗?

Rust 不是所有控制路径都返回值吗?,rust,Rust,以下是我的代码,用于查找两个数字的索引,以便它们相加为一个特定目标: use std::collections::HashMap; fn two_sum(nums: &[i32], target: i32) -> [usize;2] { let mut map: HashMap<i32, usize> = HashMap::new(); for i in 0..nums.len() { let want = target - num

以下是我的代码,用于查找两个数字的索引,以便它们相加为一个特定目标:

use std::collections::HashMap;

fn two_sum(nums: &[i32], target: i32) -> [usize;2] {
    let mut map: HashMap<i32, usize>  = HashMap::new();

   for i in  0..nums.len() {
        let want = target - nums[i];
        match map.get(&nums[i]) {
            Some(&seen) => return [seen, i],
            _ =>  map.insert(want, i),
            };
    }

    [0usize, 0usize];
}

fn main() {
    let nums = [1,3,7,4];
    let res = two_sum(&nums, 10);
    println! ("{},{}", res[0], res[1]);
}
使用std::collections::HashMap;
fn二和(nums:&[i32],目标:i32)->[usize;2]{
让mut映射:HashMap=HashMap::new();
对于0..nums.len()中的i{
让want=target-nums[i];
匹配映射。获取(&nums[i]){
Some(&seed)=>返回[seed,i],
_=>映射.插入(需要,i),
};
}
[0usize,0usize];
}
fn main(){
设nums=[1,3,7,4];
设res=两个和(&nums,10);
println!(“{},{}”,res[0],res[1]);
}
这会引发此错误:

src/bin/2sum.rs:3:1: 15:2 error: not all control paths return a value [E0269]
src/bin/2sum.rs:3 fn two_sum(nums: &[i32], target: i32) -> [usize;2] {
src/bin/2sum.rs:4     let mut map: HashMap<i32, usize>  = HashMap::new();
src/bin/2sum.rs:5 
src/bin/2sum.rs:6     for i in  0..nums.len() {
src/bin/2sum.rs:7         let want = target - nums[i];
src/bin/2sum.rs:8         match map.get(&nums[i]) {
              ...
src/bin/2sum.rs:3:1: 15:2 help: run `rustc --explain E0269` to see a detailed     explanation
error: aborting due to previous error
src/bin/2sum.rs:3:1:15:2错误:并非所有控制路径都返回值[E0269]
src/bin/2sum.rs:3 fn二和(nums:&[i32],target:i32)->[usize;2]{
src/bin/2sum.rs:4让mut-map:HashMap=HashMap::new();
src/bin/2sum.rs:5
src/bin/2sum.rs:6表示0..nums.len()中的i{
src/bin/2sum.rs:7 let want=target-nums[i];
src/bin/2sum.rs:8匹配映射.get(&nums[i]){
...
src/bin/2sum.rs:3:1:15:2帮助:运行'rustc--explain E0269'查看详细说明
错误:由于上一个错误而中止

如何解决此问题?

您可以删除
[0usize,0usize]
()之后的分号,或添加
返回[0usize,0usize]

为了改进代码,您可以返回一个。此外,在这种情况下,最好返回一个元组

use std::collections::HashMap;

fn two_sum(nums: &[i32], target: i32) -> Option<(usize, usize)> {
    let mut map: HashMap<i32, usize> = HashMap::new();

    for i in 0..nums.len() {
        let want = target - nums[i];
        match map.get(&nums[i]) {
            Some(&seen) => return Some((seen, i)),
            _ => map.insert(want, i),
        };
    }

    None
}

fn main() {
    let nums = [1, 3, 7, 4];
    let res = two_sum(&nums, 10);
    println!("{:?}", res);
}
使用std::collections::HashMap;
fn二和(nums:&[i32],目标:i32)->选项{
让mut映射:HashMap=HashMap::new();
对于0..nums.len()中的i{
让want=target-nums[i];
匹配映射。获取(&nums[i]){
Some(&seed)=>返回Some((seed,i)),
_=>映射.插入(需要,i),
};
}
没有一个
}
fn main(){
设nums=[1,3,7,4];
设res=两个和(&nums,10);
println!(“{:?}”,res);
}

您可以让所有返回路径返回一个值,在本例中,您可以在
[0usize,0usize]
您是否按照编译器的建议“运行
rustc--explain E0269查看详细解释”后删除分号。您可能会感兴趣。错误也会在线列出: