The 'copy' parameter is the most generic way for the client to handle this 
situation.

-- 
Abhijeet Gaiha
http://about.me/abhijeet.gaiha


On Sunday, 2 June 2013 at 10:32 AM, Ziad Hatahet wrote:

> Thanks everyone. I actually thought about the two suggestions before posting. 
> I thought there might be some common paradigm for this in the language though.
> 
> So I take it that implementing a += operator overload function would not have 
> a generic way to handle the case where the same parameter is passed on both 
> sides?
> 
> 
> --
> Ziad 
> 
> On Sat, Jun 1, 2013 at 9:42 PM, Tim Chevalier <catamorph...@gmail.com 
> (mailto:catamorph...@gmail.com)> wrote:
> > On Sat, Jun 1, 2013 at 9:33 PM, Ziad Hatahet <hata...@gmail.com 
> > (mailto:hata...@gmail.com)> wrote:
> > > I have the following function:
> > >
> > > fn add_equal(x: &mut Complex, y: &Complex) {
> > >     x.real += y.real;
> > >     x.imag += y.imag;
> > > }
> > >
> > > Calling the function with the same variable being passed to both arguments
> > > (i.e. add_equal(&mut c, &c)), results in the compile error:
> > >
> > > error: cannot borrow `c` as immutable because it is also borrowed as 
> > > mutable
> > >
> > > I am guessing this is to avoid aliasing issues? What is the way around 
> > > this?
> > >
> > 
> > You can copy y instead of passing a reference to it:
> > fn add_equal(x: &mut Complex, y: Complex) { ...
> > 
> > Of course, that means that at the call site, you will have to write
> > something like add_equal(&mut c, copy c).
> > 
> > Unless you want to write a function that just takes one argument and
> > doubles it, like Abhijeet suggested, I don't know of another way
> > around this.
> > 
> > Cheers,
> > Tim
> > 
> > 
> > --
> > Tim Chevalier * http://catamorphism.org/ * Often in error, never in doubt
> > "Not a riot, it's a rebellion." -- Boots Riley
> > "Attention Bros and Trolls: When I call out your spew, I'm not angry,
> > I'm defiant." -- Reg Braithwaite
> 
> _______________________________________________
> Rust-dev mailing list
> Rust-dev@mozilla.org (mailto:Rust-dev@mozilla.org)
> https://mail.mozilla.org/listinfo/rust-dev
> 
> 


_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to