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)
你可以写这个,它只是评估falseifmaybe_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)