为什么错误处理会得到Result<_, _>?

问题描述 投票:0回答:1

我在 Rust 中有以下函数。它将所有 Torrent 文件转换为磁力链接。对于某些文件,它会抛出错误。我不想跳过这些文件

use rs_torrent_magnet;

pub fn build_cache(paths: Vec<PathBuf>, magnets: String, names: String){
    for path in paths{
        println!("Reading file: {:?}", path);
        let magnet = match rs_torrent_magnet::magnet_from_torrent_file(path) {
            Ok(magnet) => magnet,
            Err(e) => {
                eprintln!("Error reading magnet from torrent file: {:?}", e);
                return;
            }
        };
    }
}

但是我收到以下编译器错误:

error[E0308]: mismatched types
  --> src/scraper.rs:33:13
   |
32 |         let magnet = match rs_torrent_magnet::magnet_from_torrent_file(path) {
   |                            ------------------------------------------------- this expression has type `std::string::String`
33 |             Ok(magnet) => magnet,
   |             ^^^^^^^^^^ expected `String`, found `Result<_, _>`
   |
   = note: expected struct `std::string::String`
                found enum `Result<_, _>`

为什么它返回Result<_, _>而不是String?

rust error-handling torrent magnet-uri bencoding
1个回答
0
投票

您试图将

magnet_from_torrent_file
的结果视为
Result
,但事实并非如此——它是
String
。该函数可能有不同的方式来发出错误信号,例如通过恐慌,但它没有记录在案,因此如果不深入了解内部结构,就没有太多可做的。

© www.soinside.com 2019 - 2024. All rights reserved.