如何为移动的 Vec<> 参数调用 Vec<>::append()?
How to call Vec<>::append() for a moved Vec<> argument?
我正在编写一个简单的构建器。我想让构建器方法使用 self
,还使用 Vec<Node>
并将其附加到 self
已经拥有的 Vec<Node>
。
我有这个方法:
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
}
另外一个提示,不用在return类型中重复类型名称,可以使用Self
代替Graph
。这使得重构更容易。
我正在编写一个简单的构建器。我想让构建器方法使用 self
,还使用 Vec<Node>
并将其附加到 self
已经拥有的 Vec<Node>
。
我有这个方法:
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
}
另外一个提示,不用在return类型中重复类型名称,可以使用Self
代替Graph
。这使得重构更容易。