To be honest I didn't try to understand what the code was doing. Just fiddled with it until it compiled:)
On Sat, Apr 26, 2014 at 9:37 AM, Kevin Ballard <[email protected]> wrote: > This "fixed" code is wrong. Instead of taking a reference to the borrow, > it actually destructs it and copies the referenced Test. Since it's not > keeping a reference anymore, that's why it works. > > The issue with the original code is test.match_fn() borrow test, and > Some(mut borrow_test) keeps that borrow alive in the borrow_test binding. > Since it's used in the match arm, that means the borrow is alive, which > prevents test.test_mutable() from being called. > > I don't know how to fix this code when I have no idea what you're actually > trying to accomplish here. > > -Kevin > > On Apr 25, 2014, at 12:55 AM, Philippe Delrieu <[email protected]> > wrote: > > Thanks for your help. It works on the test but not in my main program. > > I'll try to update the test to make it works like the main program but I > have not yet found what make the base code different. > > Philippe > > Le 24/04/2014 23:06, Artella Coding a écrit : > > 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 > > > > _______________________________________________ > 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
