Hi, the following modified program seems to work (I am using rustc
0.11-pre-nightly (d35804e 2014-04-18 00:01:22 -0700) :
**********************************************************
use std::vec::Vec;
use std::rc::Rc;
use std::cell::RefCell;
struct Test;
impl Test {
fn match_fn<'a>(&'a self) ->Option<&'a Test> {
None
}
fn test_mutable<'a>(&'a mut self, test: &'a mut Test) {}
}
fn TestMatchBorrow() {
let mut viewList: Vec<~Test> = Vec::new();
for ref mut test in viewList.mut_iter() {
match test.match_fn() {
Some(&mut borrow_test) => test.test_mutable(&mut borrow_test),
None => {},
}
}
}
#[main]
fn main() {
TestMatchBorrow();
}
**********************************************************
On Thu, Apr 24, 2014 at 9:23 PM, Philippe Delrieu
<[email protected]>wrote:
> Hello,
>
> I have a problem in my code and I can't find a solution. I develop a test
> case that generate the same error. Any idea?
>
> use std::vec::Vec;
> use std::rc::Rc;
> use std::cell::RefCell;
>
> struct Test;
>
> impl Test {
> fn match_fn<'a>(&'a self) ->Option<&'a Test> {
> None
> }
>
> fn test_mutable<'a>(&'a mut self, test: &'a Test) {}
> }
>
> fn TestMatchBorrow() {
> let mut viewList: Vec<~Test> = Vec::new();
>
> for ref mut test in viewList.mut_iter() {
> match test.match_fn() {
> Some(mut borrow_test) => test.test_mutable(borrow_test),
> None => {},
> }
> }
>
> }
>
> #[main]
> fn main() {
> TestMatchBorrow();
> }
>
> The test struct can't be changed.
> If I don't put the borrow_test in test.test_mutable(borrow_test) it
> compile.
>
> The error :
> test_match.rs:22:38: 22:42 error: cannot borrow `***test` as mutable
> because it is also borrowed as immutable
> test_match.rs:22 Some(mut borrow_test) =>
> test.test_mutable(borrow_test),
> ^~~~
> test_match.rs:21:15: 21:19 note: previous borrow of `***test` occurs
> here; the immutable borrow prevents subsequent moves or mutable borrows of
> `***test` until the borrow ends
> test_match.rs:21 match test.match_fn() {
> ^~~~
> test_match.rs:24:10: 24:10 note: previous borrow ends here
> test_match.rs:21 match test.match_fn() {
> test_match.rs:22 Some(mut borrow_test) =>
> test.test_mutable(borrow_test),
> test_match.rs:23 None => {},
> test_match.rs:24 }
>
> Philippe
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev