Rust编译报错:无法不可变借用`win`,因已被可变借用
解决Rust中raylib的可变/不可变借用冲突错误
错误原因
draw对象已经可变借用了win实例,根据Rust的借用规则:同一时间内,一个值不能同时存在可变借用和不可变借用。你在调用draw_rectangle时,又尝试通过win.get_screen_width()和win.get_screen_height()对win进行不可变借用,这直接违反了规则,导致编译错误。
修复方案
提前获取屏幕宽高并存储为变量,避免在draw持有win可变引用期间再次借用win:
let (mut win, thread) = raylib::init().size(800, 600).title("Demo").build(); // 提前获取屏幕宽高,此时win未被可变借用 let screen_width = win.get_screen_width(); let screen_height = win.get_screen_height(); draw.draw_rectangle( screen_width / 2, 0, 5, screen_height, Color::WHITE, );
补充说明
如果使用raylib-rust的标准绘图流程,通常会通过win.begin_drawing(&thread)创建绘图上下文,此时也可以直接通过上下文获取屏幕参数,避免借用冲突:
let (mut win, thread) = raylib::init().size(800, 600).title("Demo").build(); let mut draw = win.begin_drawing(&thread); draw.draw_rectangle( draw.get_screen_width() / 2, 0, 5, draw.get_screen_height(), Color::WHITE, );
内容的提问来源于stack exchange,提问作者Nibodh Daware
相关产品推荐
相关产品推荐

