我在写一个简单的构建器。我想让一个builder方法使用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
?
1条答案
按热度按时间rta7y2nd1#
问题不在于
nodes
不是可变的,你还需要显式地传递一个可变的引用给它:您还可以避免可变性:
另一个技巧是,在返回类型中不要重复类型名称,可以使用
Self
代替Graph
。这使得重构更容易。