我想使用这样一个事实:如果该索引没有任何内容但该索引仍然存在,则Vec.last()
返回 a 。None
问题是我找不到将结果与 a while
or内的任何内容进行比较的方法if
。然而,如果我使用 ,我可以比较它match
,尽管这似乎比使用while
循环效率低。if
有没有办法在一个或一个循环中比较它while
?
这就是我想要做的,但这是无效的,因为据我所知,self.particles.last() == None
你无法将事物与None
除非进行比较。None
while vec.last() == None {
num += 1;
}
Run Code Online (Sandbox Code Playgroud)
我会用Option::is_none
:
while vec.last().is_none() {
...
}
Run Code Online (Sandbox Code Playgroud)
但这很无聊。我们来这里是为了学习。也许有一个令人费解、难以阅读的选项,我们可以在其中展示我们的 Rust 肌肉?碰巧,确实有!让我们来看看我最喜欢的 Rust 功能之一:模式匹配。
那是什么?好吧,通常你会写这样的东西,只要我们获取Some
项目并同时将项目绑定到变量,它就会循环:
while let Some(elem) = vec.last() {
...
}
Run Code Online (Sandbox Code Playgroud)
Some(elem)
是一种模式。事实证明,它None
具有相同的语法作用。这是一种模式,尽管没有变量:
while let None = vec.last() {
...
}
Run Code Online (Sandbox Code Playgroud)
我承认let
没有变量看起来很奇怪,而且看起来左边的 是向后的None
,但它是有效的。
(另外,我应该指出,如果你不修改,这将是一个无限循环vec
。)
归档时间: |
|
查看次数: |
2661 次 |
最近记录: |