提问人:Nibodh Daware 提问时间:7/30/2022 更新时间:7/30/2022 访问量:68
不能借用“win”作为不可变的,因为它也被借用为可变的
cannot borrow `win` as immutable because it is also borrowed as mutable
问:
我得到一个不能借用为不可变的,因为它也被借为可变的
作为注释行win
let (mut win, thread) = raylib::init().size(800, 600).title("Demo").build();
// error at borrowing win
draw.draw_rectangle(
// here
win.get_screen_width() / 2,
0,
5,
// and here
win.get_screen_height(),
Color::WHITE,
);
答:
0赞
Azelytof
7/30/2022
#1
我认为有两种可能性(您没有提供足够的资源来在我的工作区中测试它,所以这只是假设):
在调用之前保存长度:
let (mut win, thread) = raylib::init().size(800, 600).title("Demo").build();
let width = win.get_screen_width() / 2;
let height = win.get_screen_height();
draw.draw_rectangle(width, 0, 5, height, Color::WHITE);
或者你可以克隆你的实例:
let (mut win, thread) = raylib::init().size(800, 600).title("Demo").build();
draw.draw_rectangle(win.clone().get_screen_width() / 2, 0, 5, win.clone().get_screen_height(), Color::WHITE);
希望这能有所帮助(并且^^工作)
评论
0赞
Peter Hall
7/30/2022
OP 确实需要添加更多信息才能回答这个问题。此解决方案不太可能起作用,因为错误表明 takes 和 that 必须包含可变引用。在这种情况下,您必须在分配之前引入宽度和高度变量。draw_rectangle
&mut self
draw
win
draw
0赞
Nibodh Daware
7/31/2022
这在解构我的代码以将宽度和高度转换为变量后起作用rust let (mut win, thread) = raylib::init().size(800, 600).title("Demo").build(); let win_width = win.get_screen_width(); let win_height = win.get_screen_height(); // then while calling draw draw.draw_rectangle(win_width / 2, 0, 5, win_height, Color::WHITE);
评论
draw
raylib
width
height
win.get_screen_width()
是不可变的借用,win.get_screen_height()
也是如此。这应该可以编译。实际错误来自您未在此处显示的代码。我同意@PeterHall,请提供一个最小的可重复示例。