gpt4 book ai didi

rust - 如何为 move 的 Vec<> 参数调用 Vec<>::append()?

转载 作者:行者123 更新时间:2023-12-03 11:25:28 27 4
gpt4 key购买 nike

我正在编写一个简单的构建器。我想要一个构建器方法消耗 self ,并且还消耗了 Vec<Node>并将其附加到 Vec<Node>self已经拥有了。

我有这个方法:

pub fn with_nodes(mut self, mut nodes: Vec<Node>) -> Graph {
self.nodes.append(&nodes);
self
}

nodes是非引用,因为我想使用它,它是 mut因为Vec<>::append()改变它的论点。

问题是,我明白了:

46 |             self.nodes.append(&nodes);
| ^^^^^^ types differ in mutability
|
= note: expected mutable reference `&mut Vec<Node>`
found reference `&Vec<Node>`

怎么会nodes是不可变的,因为它被明确标记为 mut ?我怎样才能使参数成为局部可变的 Vec ?

最佳答案

问题不在于 nodes 不可变,您还需要显式传递可变引用:

pub fn with_nodes(mut self, mut nodes: Vec<Node>) -> Graph {
self.nodes.append(&mut nodes);
self
}

你也可以避免可变性:

pub fn with_nodes(mut self, nodes: Vec<Node>) -> Graph {
self.nodes.extend(nodes.drain());
self
}

另一个提示,您可以使用 Self 代替 Graph,而不是在返回类型中重复类型名称。这使得重构更容易。

关于rust - 如何为 move 的 Vec<> 参数调用 Vec<>::append()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65486316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com