请戳你的鼻子。我开始使用 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>
我好久没在这里看到俄罗斯拉斯托维特人了)让我们开始吧
Не понимаю пока синтаксис let mut file = File::open(e).unwrap();
let
变量声明的开始mut
变量可以在下面的代码中更改,没有的变量mut
只能在描述中初始化一次。file
变量的名称=
我想这已经很清楚了,任务。简短而简单:将值绑定到名称(在本例中file
)现在的答案是,我们连接什么?
File
在这种情况下std::fs::File
(请务必阅读有关 rust 的文档和书籍)https://doc.rust-lang.org/std/fs/struct.File.html。简而言之:文件数据流与我们的 name 相关联file
。std::fs::File::open(...)
, https://doc.rust-lang.org/std/fs/struct.File.html#method.open 函数由открытию файла
orсоздание дескриптора файлового потока
std::fs::File::open(...)
会回来Result<File>
的,这个std::io::Result
。是一个Result
枚举(enum
_ 被发明为异常的一个很好的替代品,在增长中不需要也不需要!положительном
отрицательном
union
Result
.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>
。不,在这种情况下,您不需要为此类型实现它,因为您的程序很可能不正确 :))查看整个代码
e
在这种情况下不是纯值,它是Result<Data, Err>
!您需要打开包装,即您Result
可以使用与您相同的包装来检查它expect
。expect
(https://doc.rust-lang.org/std/result/enum.Result.html#method.expect),该函数执行相同的操作,unwrap
但它提供的信息更多,因为它显示的错误文本与你做错напишите
了。如果您开始使用它,
expect
那么也许您为什么要unwarp
完全按照应有的方式编写它?播放: https ://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=77d91596733d7785c8681e5074b199ce
#Ulin19
#Ulin1920
你
e
的是 typecore::result::Result<std::path::PathBuf, glob::GlobError>
。换句话说,结果类型。您需要处理错误。最愚蠢和最危险的: