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

Reply via email to