You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:06:47