[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

delegate and unless for __

Raj Singh

5/5/2009 8:51:00 PM

Anytime I see the delegate code usually there is an unless along with
it. The code might look like this.

Object.instance_methods.each do |m|
delegate m, :to => :@model unless m =~ /^__/
end


I am thinking that __ is escaped so that one could called
object.__SEND__ and this call will not be sent to the delegate. Is that
the reason why __ is not delegated to the delegate or the actual
reasoning is something else?

That piece of code as picked up from http://m.onkey.org/2008/1...
--
Posted via http://www.ruby-....

4 Answers

Robert Klemme

5/6/2009 4:36:00 PM

0

On 05.05.2009 22:50, Raj Singh wrote:
> Anytime I see the delegate code usually there is an unless along with
> it. The code might look like this.
>
> Object.instance_methods.each do |m|
> delegate m, :to => :@model unless m =~ /^__/
> end
>
>
> I am thinking that __ is escaped so that one could called
> object.__SEND__ and this call will not be sent to the delegate. Is that
> the reason why __ is not delegated to the delegate or the actual
> reasoning is something else?

I think you're spot on. There seems to be a convention that method
whose names start with underscores are not really meant to be part of
the regular public interface (such as "__send__").

Kind regards

robert

Robert Dober

5/6/2009 5:12:00 PM

0

On Wed, May 6, 2009 at 6:40 PM, Robert Klemme
<shortcutter@googlemail.com> wrote:
> On 05.05.2009 22:50, Raj Singh wrote:
>>
>> Anytime I see the delegate code usually there is an unless along with
>> it. The code might look like this.
>>
>> Object.instance_methods.each do |m|
>> =A0delegate m, :to =3D> :@model unless m =3D~ /^__/
>> end
>>
>>
>> I am thinking that __ is escaped so that one could called
>> object.__SEND__ and this call will not be sent to the delegate. Is that
>> the reason why __ is not delegated to the delegate or the actual
>> reasoning is something else?
>
> I think you're spot on. =A0There seems to be a convention that method who=
se
> names start with underscores are not really meant to be part of the regul=
ar
> public interface (such as "__send__").
So do I think :)
However, unless this is a somehow contrived example, I would love to
know more about the usecase for this.
Delegating all Object methods somehow puzzles me. Please do not get me
wrong, there might be a very good reason for this. But I am curious,
because whenever I did something like this I rather deleted the
methods, mixed in something or extended objects.
Maybe delegation was something I should have considered even in core
related metaprogramming.
Would you care to elaborate?

Thx in advance
Robert

--=20
Si tu veux construire un bateau ...
Ne rassemble pas des hommes pour aller chercher du bois, pr=E9parer des
outils, r=E9partir les t=E2ches, all=E9ger le travail=85 mais enseigne aux
gens la nostalgie de l=92infini de la mer.

If you want to build a ship, don=92t herd people together to collect
wood and don=92t assign them tasks and work, but rather teach them to
long for the endless immensity of the sea.

--
Antoine de Saint-Exup=E9ry

Raj Singh

5/6/2009 7:02:00 PM

0

Hi Robert,

Thanks for the answer.

As I posted in the question the code is picked up from
http://m.onkey.org/2008/1... . I did not code it so I do not know
the justification for this style of coding.

I was just curious about leaving methods starting with __ as it is.
--
Posted via http://www.ruby-....

Robert Dober

5/6/2009 9:16:00 PM

0

On Wed, May 6, 2009 at 9:01 PM, Raj Singh <neeraj.jsr@gmail.com> wrote:
> Hi Robert,
> I was just curious about leaving methods starting with __ as it is.
Than thank you even more for sharing the link :)
> --
> Posted via http://www.ruby-....
>
>



--=20
Si tu veux construire un bateau ...
Ne rassemble pas des hommes pour aller chercher du bois, pr=E9parer des
outils, r=E9partir les t=E2ches, all=E9ger le travail=85 mais enseigne aux
gens la nostalgie de l=92infini de la mer.

If you want to build a ship, don=92t herd people together to collect
wood and don=92t assign them tasks and work, but rather teach them to
long for the endless immensity of the sea.

--
Antoine de Saint-Exup=E9ry