是否可以显式标记具有未实现Send或Sync标记特征的类型,而不需要一些冗余字段?这可以是一个替代方案:
struct T {
_marker: PhantomData<*const ()>,
}
Run Code Online (Sandbox Code Playgroud)
但同样,它有一个冗余字段,非常神秘(您需要记住指针是!Send + !Sync),并且获得正确的组合可能并不简单(考虑!Sync + Send)。我相信负面特质可能是一个解决方案,但它们尚未稳定可用:
// error[E0658]: negative trait bounds are not yet fully implemented
impl !Send for T {}
Run Code Online (Sandbox Code Playgroud)
我在 Rust 中有一个 Graph 数据结构:
type NodeIndex = usize;
struct Graph {
nodes: Vec<NodeIndex>,
edges: Vec<(NodeIndex, NodeIndex)>,
}
Run Code Online (Sandbox Code Playgroud)
我想遍历函数内的所有节点并调用一个函数,该函数使用每个节点作为元素来改变图形,例如:
impl Graph {
fn mutate_fn(&mut self) {
for node in self.nodes {
self.mutate_using_node(node);
}
}
fn mutate_using_node(&mut self, node: NodeIndex) {
// mutate self here
}
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为我会有不止一个可变引用。我也不能通过 &self,因为那样我就会有一个可变引用和一个不可变引用。这在 Rust 中是如何处理的?