首页 > 解决方案 > 锈——“?” 只能在返回 'Result' 的函数中使用

问题描述

供参考:我是一名 Java 程序员,刚接触 Rust

我正在尝试读取具有 2 个输入的文件,即数组大小和数组元素。

输入:

3
1 2 3

我想创建一个通过命令行中的参数读取文件的函数,所以我编写了以下代码:(注意:它非常难看,因为我正在更改函数)

fn getArraySize() -> usize
{
    let args: Vec<String> = env::args().collect();

    let input = File::open(&args[1])?;
    let buffered = BufReader::new(input);

    let mut counter: i32 = 0;
    let arraySize: usize = 0;
    for line in buffered.lines() {
        if counter == 0
        {
            let line = String::from(line?);
            arraySize = line.parse().unwrap();
            println!("{}", arraySize);
            counter += 1;
        } 
    }
    arraySize
}

哪个是设置 const 值的函数

const ARRAYSIZE: usize = getArraySize();

我的问题是我似乎无法弄清楚如何让这条线工作

let input = File::open(&args[1])?;

我尝试将 .expected 附加到它,但什么也没发生。我尝试了在 Google 上可以找到的所有内容,但是如果没有全局变量我可以更改,我不知道如何获取文件以便我的函数可以读取它并返回 arraySize。

标签: functionrustreturn

解决方案


你可以想到?这里使用的语法:

let input = File::open(&args[1])?;

作为这个的捷径(或多或少 - 没有测试过这段代码):

let input = match File::open(&args[1]) {
    Ok(input) => input,
    Err(e) => return Err(e),
};

假设File::open返回Result<T, E>- 要使第二段代码工作,包含函数必须返回Result<U, E>where Tmay or may not be U。如果不是这种情况,那么return Err(...)返回的值将是无效的。


推荐阅读