如何为移动的Vec<>参数调用Vec<>::append()?

我正在编写一个简单的构建器。我想有一个建设者方法消耗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。这使得重构更容易。


以上是如何为移动的Vec&lt;&gt;参数调用Vec&lt;&gt;::append()?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>