[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

99.respond_to? :dup ==> true

Nit Khair

1/13/2009 7:07:00 AM

I have values of various datatypes coming into this method and the
method does a dup, since it modifies the values and obviously does not
want to change the original.

However, Fixnum's do respond to :dup but give an error when called.
First off, can someone explain this to me.
Second, i have worked around it with a "rescue" clause.

In future, should I avoid using "respond_to?" since it could cause
errors. Should I always use rescue.
I now have:

value = value.dup rescue value
--
Posted via http://www.ruby-....

4 Answers

Gennady Bystritsky

1/13/2009 7:36:00 AM

0

2 points here (and sorry for the top posting -- my web mail client does not=
quote properly):

1. It may be the case that if an object is not dup()-able, you better not q=
uietly continue with an original object as modifying it may cause undesired=
side effects. In this case, an exception from calling dup(), either NoMeth=
odError or TypeError (can't dup Fixnum), is a valid reason to report a dat=
atype error.

2. Instead of dup()-ing, you may consider using a proxy class that will del=
egate to the original object, yet keeping track of all modifications. It wi=
ll work even for data types that do not support dup().=20

Best,
Gennady.
________________________________________
From: sentinel.2001@gmx.com [sentinel.2001@gmx.com]
Sent: Monday, January 12, 2009 23:06
To: ruby-talk ML
Subject: 99.respond_to? :dup =3D=3D> true

I have values of various datatypes coming into this method and the
method does a dup, since it modifies the values and obviously does not
want to change the original.

However, Fixnum's do respond to :dup but give an error when called.
First off, can someone explain this to me.
Second, i have worked around it with a "rescue" clause.

In future, should I avoid using "respond_to?" since it could cause
errors. Should I always use rescue.
I now have:

value =3D value.dup rescue value
--
Posted via http://www.ruby-....


Nit Khair

1/13/2009 7:44:00 AM

0

Gennady Bystritsky wrote:
> 2 points here (and sorry for the top posting -- my web mail client does
> not quote properly):
>
> 1. It may be the case that if an object is not dup()-able, you better
> not quietly continue with an original object as modifying it may cause
> undesired side effects. In this case, an exception from calling dup(),
> either NoMethodError or TypeError (can't dup Fixnum), is a valid reason
> to report a datatype error.
>
> 2. Instead of dup()-ing, you may consider using a proxy class that will
> delegate to the original object, yet keeping track of all modifications.
> It will work even for data types that do not support dup().
>
> Best,
> Gennady.
> ________________________________________

Ouch! Your web client has exposed my email id to the spammers :-(
Anyway,.... no, here i do not want the original value touched since the
user may press Escape and abandon editing.

In the case of numbers and floats, usually its a call by value so a copy
is made anyway.

Anyway, as a newbie, it was quite a surprise - i've relied on
respond_to? to take care of a lot of generic code.

thx.
--
Posted via http://www.ruby-....

Gennady Bystritsky

1/13/2009 8:04:00 AM

0

First of all, it is not my web mail client to blame (it has lots of its own=
faults) -- if your e-mail were not present in the original message no clie=
nt would be able to expose it in reply anyway ;-).

As had been mentioned many times on this list (in one form or another), res=
pond_to? is a lame duck of the duck typing world ;-). It only can indicate =
that an object has a method in its inheritance chain to invoke in response =
to a named message. I has no idea -- and can't have any, really -- what tha=
t method would do for you and even how to properly invoke it.=20

Getting back to dup(), this method is defined for Object class, so every Ru=
by object, including Fixnum instances, will inherit it. On the other hand, =
there's nothing to dup() for Fixnum -- hence method redefinition to raise a=
TypeError. =20

Gennady.
________________________________________
From: sentinel.2001@gmx.com [sentinel.2001@gmx.com]
Sent: Monday, January 12, 2009 23:43
To: ruby-talk ML
Subject: Re: 99.respond_to? :dup =3D=3D> true

Gennady Bystritsky wrote:
> 2 points here (and sorry for the top posting -- my web mail client does
> not quote properly):
>
> 1. It may be the case that if an object is not dup()-able, you better
> not quietly continue with an original object as modifying it may cause
> undesired side effects. In this case, an exception from calling dup(),
> either NoMethodError or TypeError (can't dup Fixnum), is a valid reason
> to report a datatype error.
>
> 2. Instead of dup()-ing, you may consider using a proxy class that will
> delegate to the original object, yet keeping track of all modifications.
> It will work even for data types that do not support dup().
>
> Best,
> Gennady.
> ________________________________________

Ouch! Your web client has exposed my email id to the spammers :-(
Anyway,.... no, here i do not want the original value touched since the
user may press Escape and abandon editing.

In the case of numbers and floats, usually its a call by value so a copy
is made anyway.

Anyway, as a newbie, it was quite a surprise - i've relied on
respond_to? to take care of a lot of generic code.

thx.
--
Posted via http://www.ruby-....


Nit Khair

1/13/2009 4:02:00 PM

0

Gennady Bystritsky wrote:
> First of all, it is not my web mail client to blame (it has lots of its
> own faults) -- if your e-mail were not present in the original message
> no client would be able to expose it in reply anyway ;-).

Haha, the spam has begun !!!! I guess I'll have to move to a gmail
account i/o gmx.
--
Posted via http://www.ruby-....