如何取消引用 Uuid 类型?
How to dereference Uuid type?
我正在使用 Uuid crate 提供唯一 ID,以实例化具有唯一标识符的 Node
结构的每个新版本。有时我想使用 .contains()
过滤这些结构,以检查结构的 id
是否在 Vec<Uuid>
.
的某个数组内
use uuid::Uuid;
struct Node {
id: Uuid,
}
impl Node {
fn new() -> Self {
let new_obj = Node {
id: Uuid::new_v4()
};
new_obj
}
fn id(&self) -> Uuid {
self.id
}
}
fn main() {
let my_objs = vec![
Node::new(),
Node::new(),
Node::new(),
Node::new(),
];
let some_ids = vec![my_objs[0].id(), my_objs[3].id()];
}
fn filter_objs(all_items: &Vec<Node>, to_get: &Vec<Uuid>){
for z in to_get {
let wanted_objs = &all_items.iter().filter(|s| to_get.contains(*s.id()) == true);
}
}
然而这给出了错误:
error[E0614]: type `Uuid` cannot be dereferenced
--> src/main.rs:32:72
|
32 | let wanted_objs = &all_items.iter().filter(|s| to_get.contains(*s.id()) == true);
| ^^^^^^^
如何为 Uuid
类型启用解引用来解决这个问题?
Uuid
没有实现 Deref
特性,所以它不能被取消引用,也不需要,因为你试图将它作为参数传递给函数期待一个参考。如果将 *s.id()
更改为 &s.id()
,代码将编译:
fn filter_objs(all_items: &Vec<Node>, to_get: &Vec<Uuid>) {
for z in to_get {
let wanted_objs = &all_items
.iter()
// changed from `*s.id()` to `&s.id()` here
.filter(|s| to_get.contains(&s.id()) == true);
}
}
我正在使用 Uuid crate 提供唯一 ID,以实例化具有唯一标识符的 Node
结构的每个新版本。有时我想使用 .contains()
过滤这些结构,以检查结构的 id
是否在 Vec<Uuid>
.
use uuid::Uuid;
struct Node {
id: Uuid,
}
impl Node {
fn new() -> Self {
let new_obj = Node {
id: Uuid::new_v4()
};
new_obj
}
fn id(&self) -> Uuid {
self.id
}
}
fn main() {
let my_objs = vec![
Node::new(),
Node::new(),
Node::new(),
Node::new(),
];
let some_ids = vec![my_objs[0].id(), my_objs[3].id()];
}
fn filter_objs(all_items: &Vec<Node>, to_get: &Vec<Uuid>){
for z in to_get {
let wanted_objs = &all_items.iter().filter(|s| to_get.contains(*s.id()) == true);
}
}
然而这给出了错误:
error[E0614]: type `Uuid` cannot be dereferenced
--> src/main.rs:32:72
|
32 | let wanted_objs = &all_items.iter().filter(|s| to_get.contains(*s.id()) == true);
| ^^^^^^^
如何为 Uuid
类型启用解引用来解决这个问题?
Uuid
没有实现 Deref
特性,所以它不能被取消引用,也不需要,因为你试图将它作为参数传递给函数期待一个参考。如果将 *s.id()
更改为 &s.id()
,代码将编译:
fn filter_objs(all_items: &Vec<Node>, to_get: &Vec<Uuid>) {
for z in to_get {
let wanted_objs = &all_items
.iter()
// changed from `*s.id()` to `&s.id()` here
.filter(|s| to_get.contains(&s.id()) == true);
}
}