RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1053456
Accepted
Dima Kuzmin
Dima Kuzmin
Asked:2020-12-03 02:42:20 +0000 UTC2020-12-03 02:42:20 +0000 UTC 2020-12-03 02:42:20 +0000 UTC

RUST - 循环读取文件

  • 772

请戳你的鼻子。我开始使用 Rust。我不知道如何在循环中使用变量。

fn main() {
    for e in glob("./*.json").expect("Failed to read glob pattern") {

       let mut file = File::open(e).unwrap();

    }
}

我还不明白语法 let mut file = File::open(e).unwrap();

如果我这样做,我发誓:

让 mut 文件 = File::open(e).unwrap(); | ^ 该特征std::convert::AsRef<std::path::Path>未实现 std::result::Result<std::path::PathBuf, glob::GlobError>

rust
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Denis Kotlyarov
    2020-12-13T17:09:12Z2020-12-13T17:09:12Z

    我好久没在这里看到俄罗斯拉斯托维特人了)让我们开始吧

    Не понимаю пока синтаксис let mut file = File::open(e).unwrap();

    let变量声明的开始

    mut变量可以在下面的代码中更改,没有的变量mut只能在描述中初始化一次。

    file变量的名称

    =我想这已经很清楚了,任务。简短而简单:将值绑定到名称(在本例中file)

    现在的答案是,我们连接什么?

    1. File在这种情况下std::fs::File(请务必阅读有关 rust 的文档和书籍)https://doc.rust-lang.org/std/fs/struct.File.html。简而言之:文件数据流与我们的 name 相关联file。

    2. std::fs::File::open(...), https://doc.rust-lang.org/std/fs/struct.File.html#method.open 函数由открытию файлаorсоздание дескриптора файлового потока

    3. std::fs::File::open(...)会回来Result<File>的,这个std::io::Result。是一个Result枚举(enum_ 被发明为异常的一个很好的替代品,在增长中不需要也不需要!положительномотрицательномunionResult

    4. .unwrap() https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap函数。它检查枚举Result,如果它有一个肯定的答案,那么你需要解包枚举Result并从中获取我们的枚举std::fs::File,在否定的情况下,会发生恐慌(流死亡并且很可能你的程序结束)。

    Если так делаю - ругается: let mut file = File::open(e).unwrap(); | ^ the trait std::convert::AsRef<std::path::Path> is not implemented for std::result::Result<std::path::PathBuf, glob::GlobError>

    阅读编译器告诉你的内容,它本质上是这样说的:)你肯定需要读一本书,例如这本书(https://doc.rust-lang.org/book/second-edition/index.html https:// doc.rust- lang.org/book/first-edition/index.html,可以在俄语中找到)

    编译器说трейт AsRef<Path>(https://doc.rust-lang.org/std/convert/trait.AsRef.html)没有为 type 实现Result<PathBuf, Err>。不,在这种情况下,您不需要为此类型实现它,因为您的程序很可能不正确 :))

    查看整个代码

    fn main() {
        for e in glob("./*.json").expect("Failed to read glob pattern") {
           let mut file = File::open(e).unwrap();
        }
    }
    

    e在这种情况下不是纯值,它是Result<Data, Err>!您需要打开包装,即您Result可以使用与您相同的包装来检查它expect。expect(https://doc.rust-lang.org/std/result/enum.Result.html#method.expect),该函数执行相同的操作,unwrap但它提供的信息更多,因为它显示的错误文本与你做错напишите了。

    如果您开始使用它,expect那么也许您为什么要unwarp完全按照应有的方式编写它?

    use std::fs::File;
    use glob::glob;
    
    fn main() {
        for e in glob("./*.json").expect("Err, Failed to read glob pattern...") {
    
            let mut file = File::open(e.expect("Err, glob data...")).expect("Err open file...");
    
        }
    }
    

    播放: https ://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=77d91596733d7785c8681e5074b199ce

    #Ulin19 #Ulin1920

    • 2
  2. Ainar-G
    2020-12-03T03:47:46Z2020-12-03T03:47:46Z

    你e的是 type core::result::Result<std::path::PathBuf, glob::GlobError>。换句话说,结果类型。您需要处理错误。最愚蠢和最危险的:

    fn main() {
        for f in glob::glob("./*.rs").expect("failed to read glob pattern") {
            let mut file = fs::File::open(f.unwrap()).unwrap();
        };
    }
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5