Formulir Kontak

Nama

Email *

Pesan *

Cari Blog Ini

Cannot Borrow As Mutable Because It Is Also Borrowed As Immutable

Rust Compiler Tips: When You Get a Borrow Checker Error

Overlapping Mutability

One of the most common borrow errors you'll encounter involves overlapping mutability. This occurs when you try to borrow a value that's already been borrowed for a different purpose. For example, the following code will generate an error:

let mut v = vec![1, 2, 3]; let a = &v[0]; let b = &mut v[1];

In this case, the error is caused by the fact that the mutable borrow of v[1] overlaps with the immutable borrow of v[0]. To fix this error, you can either make both borrows mutable or make both borrows immutable.

Interior Mutability

Another common borrow checker error involves interior mutability. This occurs when you try to borrow a value that contains a mutable field. For example, the following code will generate an error:

struct Foo { a: i32, b: String, } let mut foo = Foo { a: 1, b: String::from("hello") }; let a = &foo.a; let b = &mut foo.b;

In this case, the error is caused by the fact that the mutable borrow of foo.b overlaps with the immutable borrow of foo.a. To fix this error, you can use the RefCell type to allow interior mutability.

Conclusion

The borrow checker is a powerful tool that can help you write safe and correct Rust code. However, it can also be a bit tricky to use at first. By understanding the common borrow checker errors, you can avoid them and write Rust code with confidence.


Komentar