terminology: class methods versus kernel methods

Discussion in 'Ruby' started by Thufir, Oct 23, 2007.

  1. Thufir

    Thufir Guest

    "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?
     
    Thufir, Oct 23, 2007
    #1
    1. Advertising

  2. Thufir

    Ola Bini Guest

    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.blogspot.com)
    JRuby Core Developer
    Developer, ThoughtWorks Studios (http://studios.thoughtworks.com)
    Practical JRuby on Rails (http://apress.com/book/view/9781590598818)

    "Yields falsehood when quined" yields falsehood when quined.
     
    Ola Bini, Oct 23, 2007
    #2
    1. Advertising

  3. Re: terminology: class methods versus kernel methods

    On 10/23/07, 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, 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.denhaven2.com/
     
    Rick DeNatale, Oct 23, 2007
    #3
  4. Thufir

    Thufir Guest

    Re: terminology: class methods versus kernel methods

    On Oct 23, 2:43 pm, Ola Bini <> 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, Oct 23, 2007
    #4
  5. Thufir

    Thufir Guest

    Re: terminology: class methods versus kernel methods

    On Oct 23, 2:45 pm, "Rick DeNatale" <> 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
     
    Thufir, Oct 23, 2007
    #5
  6. Thufir

    Pat Maddox Guest

    Re: terminology: class methods versus kernel methods

    On 10/23/07, Thufir <> wrote:
    > On Oct 23, 2:45 pm, "Rick DeNatale" <> 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
     
    Pat Maddox, Oct 23, 2007
    #6
  7. Re: terminology: class methods versus kernel methods

    Hi --

    On Wed, 24 Oct 2007, Thufir wrote:

    > On Oct 23, 2:45 pm, "Rick DeNatale" <> 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?


    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.

    Of course, the module Kernel is, itself, an Object :) You'll find
    that if you look closely at the top of the object tree in Ruby, there
    are some circularities:

    - Kernel is a Module
    - Module is a Class
    - Class is a subclass of Module
    - Object is a Class
    - Class is an Object

    etc. Don't worry about it, though. The reason there's circularity at
    the top of the object tree is so that the rest of the object tree --
    i.e., everything you really need to do -- makes sense.


    David

    --
    Upcoming training by David A. Black/Ruby Power and Light, LLC:
    * Advancing With Rails, Edison, NJ, November 6-9
    * Advancing With Rails, Berlin, Germany, November 19-22
    * Intro to Rails, London, UK, December 3-6 (by Skills Matter)
    See http://www.rubypal.com for details!
     
    David A. Black, Oct 23, 2007
    #7
  8. Thufir

    Thufir Guest

    Re: terminology: class methods versus kernel methods

    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.



    thanks to all,


    Thufir
     
    Thufir, Oct 24, 2007
    #8
  9. Thufir

    Robert Dober Guest

    Re: terminology: class methods versus kernel methods

    On 10/24/07, Thufir <> 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.blogspot.com/
     
    Robert Dober, Oct 24, 2007
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. yogesh
    Replies:
    3
    Views:
    610
    Kenny McCormack
    Feb 12, 2006
  2. SG
    Replies:
    4
    Views:
    288
    Peter Remmers
    Apr 14, 2011
  3. Paul
    Replies:
    63
    Views:
    1,319
  4. Paul Butcher
    Replies:
    12
    Views:
    779
    Gary Wright
    Nov 28, 2007
  5. Alex DeCaria
    Replies:
    5
    Views:
    128
    Alex DeCaria
    Feb 22, 2010
Loading...

Share This Page