小编Kit*_*tsu的帖子

如何为类型实现 !Send 或 !Sync?

是否可以显式标记具有未实现SendSync标记特征的类型,而不需要一些冗余字段?这可以是一个替代方案:

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

14
推荐指数
1
解决办法
3581
查看次数

Rust,在迭代中需要一个可变的 Self 引用

我在 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 中是如何处理的?

rust borrow-checker

6
推荐指数
1
解决办法
333
查看次数

标签 统计

rust ×2

borrow-checker ×1