fn pair_finder(pairs_length: u64) {
let mut path: HashMap<u64, u64> = HashMap::new();
for i in 0..pairs_length {
if (metadata.token0 == pair_metadata.token0)
|| (metadata.token0 == pair_metadata.token1)
|| (i == *path.get(¤t_depth).unwrap())
{
continue;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个包含上述块的函数。Path 是HashMap
其中第一个u64
是路径的 ID,第二个u64
是对 ID。current_depth
used 是循环的一部分,在添加新的路径后它会增加。
然而它惊慌失措。这是因为我i == *path.get(¤t_depth).unwrap()
在 if 块中使用了。并且HashMap
是空的current_depth
并且它有一个None
值。有什么方法可以防止恐慌None
并将 if 块视为false
?
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:69:52
Run Code Online (Sandbox Code Playgroud)
Option<T>
执行Eq
时T
执行Eq
。这意味着您可以直接比较该Option
类型的变体,如下所示:
assert!(Some(1) == Some(1));
assert!(None::<i32> == None);
assert!(Some(1) != Some(2));
assert!(Some(1) != None);
Run Code Online (Sandbox Code Playgroud)
所以不要写这个,如果maybe_v
是None
变体,它会恐慌:
maybe_v.unwrap() == a
Run Code Online (Sandbox Code Playgroud)
你可以写这个,它只是评估false
ifmaybe_v
是None
变体:
maybe_v == Some(a)
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,你可以写:
fn pair_finder(pairs_length: u64) {
let mut path: HashMap<u64, u64> = HashMap::new();
for i in 0..pairs_length {
if (metadata.token0 == pair_metadata.token0)
|| (metadata.token0 == pair_metadata.token1)
|| (Some(&i) == path.get(¤t_depth))
{
continue;
}
}
}
Run Code Online (Sandbox Code Playgroud)