Is there a way to do something like
a = 1
alias(b,a)
a += 1
where the desired effect is that now b == 2?
Eliah Hecht wrote:
Is there a way to do something like
a = 1
alias(b,a)
a += 1
where the desired effect is that now b == 2?
It's impossible in the general case, because
a+=1 literally means a=a+1 (in other words,
it creates a new object and assigns that to
a).
Fixnums are not mutable at all. But if an
object is mutable, and an operator modifies
the object rather than creating a new one,
the behavior you want will happen:
a = "cat"
b = a
a << "hode"
puts b # cathode
However, assignment never keeps the same
object:
a = "cat"
b = a
a += "hode"
puts b # cat
In short: Assignment works on variables, not
objects; but methods are called on objects,
not variables.
Make sense?
Hal
I know why it doesn't work, I just want to know how to make it work
(if it's doable without making a wrapper object).
···
On Tue, 1 Mar 2005 08:57:41 +0900, Hal Fulton <hal9000@hypermetrics.com> wrote:
Eliah Hecht wrote:
> Is there a way to do something like
> a = 1
> alias(b,a)
> a += 1
> where the desired effect is that now b == 2?
>It's impossible in the general case, because
a+=1 literally means a=a+1 (in other words,
it creates a new object and assigns that to
a).Fixnums are not mutable at all. But if an
object is mutable, and an operator modifies
the object rather than creating a new one,
the behavior you want will happen:a = "cat"
b = a
a << "hode"
puts b # cathodeHowever, assignment never keeps the same
object:a = "cat"
b = a
a += "hode"
puts b # catIn short: Assignment works on variables, not
objects; but methods are called on objects,
not variables.Make sense?
Hal
I mean, can't I just tell ruby that b refers to a, instead of
referring to a's value?
···
On Mon, 28 Feb 2005 16:04:20 -0800, Eliah Hecht <eliahhecht@gmail.com> wrote:
I know why it doesn't work, I just want to know how to make it work
(if it's doable without making a wrapper object).On Tue, 1 Mar 2005 08:57:41 +0900, Hal Fulton <hal9000@hypermetrics.com> wrote:
> Eliah Hecht wrote:
> > Is there a way to do something like
> > a = 1
> > alias(b,a)
> > a += 1
> > where the desired effect is that now b == 2?
> >
>
> It's impossible in the general case, because
> a+=1 literally means a=a+1 (in other words,
> it creates a new object and assigns that to
> a).
>
> Fixnums are not mutable at all. But if an
> object is mutable, and an operator modifies
> the object rather than creating a new one,
> the behavior you want will happen:
>
> a = "cat"
> b = a
> a << "hode"
> puts b # cathode
>
> However, assignment never keeps the same
> object:
>
> a = "cat"
> b = a
> a += "hode"
> puts b # cat
>
> In short: Assignment works on variables, not
> objects; but methods are called on objects,
> not variables.
>
> Make sense?
>
>
> Hal
>
>
Eliah Hecht wrote:
I know why it doesn't work, I just want to know how to make it work
(if it's doable without making a wrapper object).
OK, sorry. Someone else will benefit from the explanation. ![]()
AFAIK it's impossible without a wrapper object.
Hal
I did. Thanks a lot.
-Shalev
···
On Feb 28, 2005, at 7:06 PM, Hal Fulton wrote:
OK, sorry. Someone else will benefit from the explanation.
Eliah Hecht wrote:
I mean, can't I just tell ruby that b refers to a, instead of
referring to a's value?
# Entire needlessly included lengthy prior post snipped
Can I ask that people try, when replying to a post, a) trim all but the parts of the prior post that are needed for context, and b) not top-post (that is, please do not put the reply *before* the text being replied to).
Thanks,
James
···
On Mon, 28 Feb 2005 16:04:20 -0800, Eliah Hecht <eliahhecht@gmail.com> wrote:
Sorry about that; Gmail's got me spoiled.
My bad,
-Eliah.
···
On Tue, 1 Mar 2005 14:31:07 +0900, James Britt <jamesUNDERBARb@neurogami.com> wrote:
Can I ask that people try, when replying to a post, a) trim all but the
parts of the prior post that are needed for context, and b) not top-post
(that is, please do not put the reply *before* the text being replied to).