[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

terminology: class methods versus kernel methods

Thufir Hawat

10/23/2007 9:30:00 PM

"One secret about kernel methods like print: they are
actually class methods," according to why's poignant guide to ruby.
This is frustrating for me, because I first thought "oh, that's like a
static class method, a la Math.whatever()," and then accepted the
"kernel" terminology.

Kernel means class methods?


8 Answers

Ola Bini

10/23/2007 9:44:00 PM

0

Thufir wrote:
> "One secret about kernel methods like print: they are
> actually class methods," according to why's poignant guide to ruby.
> This is frustrating for me, because I first thought "oh, that's like a
> static class method, a la Math.whatever()," and then accepted the
> "kernel" terminology.
>
> Kernel means class methods?
>
>
No. Kernel methods are methods defined on the Kernel module.

Class methods is not strictly correct either. print and others are
usually called module methods.

Cheers

--
Ola Bini (http://ola-bini.bl...)
JRuby Core Developer
Developer, ThoughtWorks Studios (http://studios.though...)
Practical JRuby on Rails (http://apress.com/book/view/978...)

"Yields falsehood when quined" yields falsehood when quined.



Rick DeNatale

10/23/2007 9:45:00 PM

0

On 10/23/07, Thufir <hawat.thufir@gmail.com> wrote:
> "One secret about kernel methods like print: they are
> actually class methods," according to why's poignant guide to ruby.
> This is frustrating for me, because I first thought "oh, that's like a
> static class method, a la Math.whatever()," and then accepted the
> "kernel" terminology.
>
> Kernel means class methods?

No, and I don't understand what why means.

print is an instance method of the Kernel module.

The Object class includes Kernel, so the instance methods of Kernel
are effectively instance methods of every object, at least in Ruby
1.8.

I think the only sense that print is a class method is that Module,
and therefore Class inherits it from Object which gets it from
including Kernel. In the same sense then ==, object_id, ... are class
methods. In other words classes are objects.

Ruby 1.9 introduces a BasicObject which doesn't include kernel and can
be used for advanced use cases such as proxies which need to minimize
the number of methods they implement.


--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denh...

Thufir Hawat

10/23/2007 9:58:00 PM

0

On Oct 23, 2:43 pm, Ola Bini <ola.b...@gmail.com> wrote:
[...]
> > Kernel means class methods?
>
> No. Kernel methods are methods defined on the Kernel module.
>
> Class methods is not strictly correct either. print and others are
> usually called module methods.
[...]

I've got a lot to learn.


thanks,

Thufir


Thufir Hawat

10/23/2007 10:00:00 PM

0

On Oct 23, 2:45 pm, "Rick DeNatale" <rick.denat...@gmail.com> wrote:
[...]
> print is an instance method of the Kernel module.
>
> The Object class includes Kernel, so the instance methods of Kernel
> are effectively instance methods of every object, at least in Ruby
> 1.8.
[...]

Kernel is a class, sub-class, of Object?



-Thufir


Pat Maddox

10/23/2007 10:04:00 PM

0

On 10/23/07, Thufir <hawat.thufir@gmail.com> wrote:
> On Oct 23, 2:45 pm, "Rick DeNatale" <rick.denat...@gmail.com> wrote:
> [...]
> > print is an instance method of the Kernel module.
> >
> > The Object class includes Kernel, so the instance methods of Kernel
> > are effectively instance methods of every object, at least in Ruby
> > 1.8.
> [...]
>
> Kernel is a class, sub-class, of Object?
>
>
>
> -Thufir
>
>
>

No, it's a module, and it's included into Object.

baggio:~ pergesu$ irb
irb(main):001:0> Kernel.class
=> Module
irb(main):002:0> Object.included_modules
=> [Kernel]

Pat

David A. Black

10/23/2007 10:06:00 PM

0

Thufir Hawat

10/24/2007 9:17:00 AM

0

Robert Dober

10/24/2007 10:02:00 AM

0

On 10/24/07, Thufir <hawat.thufir@gmail.com> wrote:
> On Wed, 24 Oct 2007 07:05:52 +0900, David A. Black wrote:
>
> > Kernel is a module. Object mixes it in -- essentially:
> >
> > class Object
> > include Kernel
> > end
> >
> > so that every instance of Object, or a subclass of Object, gets access
> > to the instance methods defined in Kernel.
>
> Ok. Is this composition? A work around for multiple inheritance?
> Weird and wild stuff.
Not at all weird and wild and neither a workaround :)
Mixins are one of the cornerstones of Ruby and they are not a workaround
for MI but a replacement. A deliberate and IMHO excellent choice of Matz.

Robert

--
what do I think about Ruby?
http://ruby-smalltalk.blo...