45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# B0002
 | 
						|
 | 
						|
To keep [Rust rules on references](https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#the-rules-of-references) (either one mutable reference or any number of immutable references) on a resource, it is not possible to have more than one resource of a kind if one is mutable in the same system. This can happen between [`Res<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.Res.html) and [`ResMut<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.ResMut.html) for the same `T`, or between [`NonSend<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.NonSend.html) and [`NonSendMut<T>`](https://docs.rs/bevy/*/bevy/ecs/system/struct.NonSendMut.html) for the same `T`.
 | 
						|
 | 
						|
Erroneous code example:
 | 
						|
 | 
						|
```rust,should_panic
 | 
						|
use bevy::prelude::*;
 | 
						|
 | 
						|
fn update_materials(
 | 
						|
    mut material_updater: ResMut<Assets<StandardMaterial>>,
 | 
						|
    current_materials: Res<Assets<StandardMaterial>>,
 | 
						|
) {
 | 
						|
    // ...
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
    App::new()
 | 
						|
        .add_plugins(DefaultPlugins)
 | 
						|
        .add_systems(Update, update_materials)
 | 
						|
        .run();
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
This will panic, as it's not possible to have both a mutable and an immutable resource on `State` at the same time.
 | 
						|
 | 
						|
As a mutable resource already provide access to the current resource value, you can remove the immutable resource.
 | 
						|
 | 
						|
```rust,no_run
 | 
						|
use bevy::prelude::*;
 | 
						|
 | 
						|
fn update_materials(
 | 
						|
    mut material_updater: ResMut<Assets<StandardMaterial>>,
 | 
						|
) {
 | 
						|
    // ...
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
    App::new()
 | 
						|
        .add_plugins(DefaultPlugins)
 | 
						|
        .add_systems(Update, update_materials)
 | 
						|
        .run();
 | 
						|
}
 | 
						|
```
 |