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查看详细解释”后删除分号。您可能会感兴趣。错误也会在线列出: