编译器抱怨你正在将引用与值进行比较,因为你正在进行比较
&_
到
_
,就像做
&420 == 69 (&i32 to i32)
.
所以,只需删除
&
assert_eq!(board.columns[0].len(), 5);
我怀疑你添加了一个
&
首先是因为这个错误消息。
error[E0382]: borrow of moved value: `board`
--> ***\src/main.rs:36:16
|
26 | let mut board = Board {
| --------- move occurs because `board` has type `Board`, which does not implement the `Copy` trait
...
35 | board.add_card();
| ---------- `board` moved due to this method call
36 | assert_eq!(board.columns[0].len(), 5);
| ^^^^^^^^^^^^^^^^ value borrowed here after move
但这是因为之前
board.add_card()
线,
该功能拥有所有权。
你可以通过注释掉前一行来确认这一点,错误就会消失,
解决方案
1更改参考
将函数更改为仅供参考,以及
&mut
如果你需要的话。
impl Board {
fn add_card(&mut self){todo!()}
}
2返回自我
更改函数以获取所有权并返回
Self
impl Board {
fn add_card(self)->Self{todo!()}
}
使用
let board = board.add_card();
/// you can chain method like this
let board = board
.add_card()
.add_card()
.add_card()
.add_card()
.add_card()
.add_card();