[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Re: Simple copy of attributes

Gavin Kistner

12/19/2006 4:33:00 PM

From: Trans [mailto:transfire@gmail.com]
> Facets has Kernel#set_from:
>
> bidule.set_from(biniou, :foo, :bar, :baz)

Out of curiosity, why put that in Kernel instead of Object?

Actually, what heuristic do people use in general for adding methods to
Kernel versus putting them in Object? Assuming that my oh-so-pretty flow
diagram[1] is correct, the end functionality should be equivalent. Is it
just a matter of semantics as to where they ought to go?

[1] http://phrogz.net/RubyLibs/RubyMethodLook...

2 Answers

Trans

12/20/2006 2:18:00 AM

0


Gavin Kistner wrote:
> From: Trans [mailto:transfire@gmail.com]
> > Facets has Kernel#set_from:
> >
> > bidule.set_from(biniou, :foo, :bar, :baz)
>
> Out of curiosity, why put that in Kernel instead of Object?
>
> Actually, what heuristic do people use in general for adding methods to
> Kernel versus putting them in Object? Assuming that my oh-so-pretty flow
> diagram[1] is correct, the end functionality should be equivalent. Is it
> just a matter of semantics as to where they ought to go?
>
> [1] http://phrogz.net/RubyLibs/RubyMethodLook...

It is something even experienced ruby programmer's can fail to realize:
Object class has NO methods. ri is somewhat misleading in this regard,
and the functionality equivalency you mention often means it goes
unnoticed. it certainly surprised me when i first discovered it. While
only matz can say exactly why, i think Object is left empty for end
programmers to add their extension methods to --that way they are
easily distinguished from built-in Kernel methods. Hence a lower-level
lib like Facets uses Kernel, while a higher-level app like Basecamp
would use Object --at least that's my take on it.

btw that reminds me -- YAML/Syck is sticking some methods in Object,
that perhaps would be more appropriate in Kernel (?)

irb(main):002:0> p Object.instance_methods(false)
[]
=> nil
irb(main):003:0> require 'yaml'
=> true
irb(main):004:0> p Object.instance_methods(false)
["taguri", "taguri=", "to_yaml_properties", "to_yaml",
"to_yaml_style"]

t.

Trans

12/20/2006 2:16:00 PM

0


Jason Mayer wrote:
> I'm sorry for this question, but I'm a newbie and I just started reading the
> Little Book of Ruby. On page 22 it says that "the to_s method is defined
> for the Object class itself". If the Object class has no methods (as your
> irb session shows), then what exactly is meant by the Little Book of Ruby
> statement?

That's a good example. Technically, #to_s is defined in Kernel not
Object. But since everyithing in Kernel is defined ultimately for
Object b/c Kernel is included into Object, then in a round about way
what the book is true. It would be better if it mentioned Kernel's
invovlement though.

t.