classless methods

Discussion in 'Ruby' started by Dave Rose, Oct 27, 2006.

  1. Dave Rose

    Dave Rose Guest

    what class does a classless independent method belong too?
    another words if i just make an new irb session and type:

    def widget(tidbit)
    tidbit
    end

    a=1.0
    puts widget(a)

    b='string'

    puts widget(b)

    what class will the widget method belong too?

    --
    Posted via http://www.ruby-forum.com/.
    Dave Rose, Oct 27, 2006
    #1
    1. Advertising

  2. Dave Rose wrote:
    > what class does a classless independent method belong too?


    <snip>

    Kernel.

    Regards,

    Dan
    Daniel Berger, Oct 27, 2006
    #2
    1. Advertising

  3. Dave Rose

    Trans Guest

    Dave Rose wrote:
    > what class does a classless independent method belong too?
    > another words if i just make an new irb session and type:
    >
    > def widget(tidbit)
    > tidbit
    > end
    >
    > a=1.0
    > puts widget(a)
    >
    > b='string'
    >
    > puts widget(b)
    >
    > what class will the widget method belong too?


    Not Kernel, it becomes a private method of Object class.

    T.
    Trans, Oct 27, 2006
    #3
  4. --5vb8QKeSi34BFwx0
    Content-Type: text/plain; charset=us-ascii
    Content-Disposition: inline
    Content-Transfer-Encoding: quoted-printable

    On 2006.10.28 01:10, Dave Rose wrote:
    > what class does a classless independent method belong too?
    > another words if i just make an new irb session and type:
    >=20
    > def widget(tidbit)
    > tidbit
    > end
    >=20
    > a=3D1.0
    > puts widget(a)
    >=20
    > b=3D'string'
    >=20
    > puts widget(b)
    >=20
    > what class will the widget method belong too?


    Ruby can tell you.

    def widget
    # ...
    end

    p method('widget') # =3D> #<Method: Object#widget>

    p Object.methods.include? 'widget' # =3D> true=20
    p Object.ancestors # =3D> [Object, Kernel]
    p Kernel.methods.include? 'widget' # =3D> true=20

    --5vb8QKeSi34BFwx0
    Content-Type: application/pgp-signature
    Content-Disposition: inline

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.5 (FreeBSD)

    iD8DBQFFQj1Y7Nh7RM4TrhIRAuRxAKDCdjQYRNvXDEYX1Mj9VG9bonUGPgCgocMF
    Prg9lfPt0xaky9ryqSn+rkQ=
    =zLWP
    -----END PGP SIGNATURE-----

    --5vb8QKeSi34BFwx0--
    Eero Saynatkari, Oct 27, 2006
    #4
  5. Daniel Berger wrote:
    > Dave Rose wrote:
    > > what class does a classless independent method belong too?

    >
    > <snip>
    >
    > Kernel.


    Whoops. Make that Object.

    - Dan
    Daniel Berger, Oct 27, 2006
    #5
  6. Dave Rose

    matt neuburg Guest

    Dave Rose <> wrote:

    > what class does a classless independent method belong too?
    > another words if i just make an new irb session and type:
    >
    > def widget(tidbit)
    > tidbit
    > end
    >
    > a=1.0
    > puts widget(a)
    >
    > b='string'
    >
    > puts widget(b)
    >
    > what class will the widget method belong too?


    <http://www.rubycentral.com/faq/rubyfaq-7.html#ss7.4>

    m.


    --
    matt neuburg, phd = , http://www.tidbits.com/matt/
    Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
    AppleScript - http://www.amazon.com/gp/product/0596102119
    Read TidBITS! It's free and smart. http://www.tidbits.com
    matt neuburg, Oct 27, 2006
    #6
  7. And since Object is an ancestor of pretty much everything in ruby,
    it's interesting to note that these methods are now defined for
    practically everything in ruby:

    irb(main):001:0> def say_hello
    irb(main):002:1> "Hello"
    irb(main):003:1> end
    => nil
    irb(main):004:0> say_hello
    => "Hello"
    irb(main):005:0> [1,3,5].say_hello
    => "Hello"
    irb(main):006:0> Array.say_hello
    => "Hello"
    irb(main):007:0> Hash.say_hello
    => "Hello"
    irb(main):008:0>


    On 10/27/06, matt neuburg <> wrote:
    > Dave Rose <> wrote:
    >
    > > what class does a classless independent method belong too?
    > > another words if i just make an new irb session and type:
    > >
    > > def widget(tidbit)
    > > tidbit
    > > end
    > >
    > > a=1.0
    > > puts widget(a)
    > >
    > > b='string'
    > >
    > > puts widget(b)
    > >
    > > what class will the widget method belong too?

    >
    > <http://www.rubycentral.com/faq/rubyfaq-7.html#ss7.4>
    >
    > m.
    >
    >
    > --
    > matt neuburg, phd = , http://www.tidbits.com/matt/
    > Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
    > AppleScript - http://www.amazon.com/gp/product/0596102119
    > Read TidBITS! It's free and smart. http://www.tidbits.com
    >
    >
    Jason Merrill, Oct 27, 2006
    #7
  8. Dave Rose

    matt neuburg Guest

    Jason Merrill <> wrote:

    > And since Object is an ancestor of pretty much everything in ruby,
    > it's interesting to note that these methods are now defined for
    > practically everything in ruby:
    >
    > irb(main):001:0> def say_hello
    > irb(main):002:1> "Hello"
    > irb(main):003:1> end
    > => nil
    > irb(main):004:0> say_hello
    > => "Hello"
    > irb(main):005:0> [1,3,5].say_hello
    > => "Hello"


    But that's just a vagary of how irb works. You couldn't do that in a
    real script. m.


    --
    matt neuburg, phd = , http://www.tidbits.com/matt/
    Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
    AppleScript - http://www.amazon.com/gp/product/0596102119
    Read TidBITS! It's free and smart. http://www.tidbits.com
    matt neuburg, Oct 27, 2006
    #8
  9. Dave Rose

    Hugh Sasse Guest

    On Sat, 28 Oct 2006, matt neuburg wrote:

    > Jason Merrill <> wrote:
    >
    > > And since Object is an ancestor of pretty much everything in ruby,
    > > it's interesting to note that these methods are now defined for
    > > practically everything in ruby:
    > >
    > > irb(main):001:0> def say_hello
    > > irb(main):002:1> "Hello"
    > > irb(main):003:1> end
    > > => nil
    > > irb(main):004:0> say_hello
    > > => "Hello"
    > > irb(main):005:0> [1,3,5].say_hello
    > > => "Hello"

    >
    > But that's just a vagary of how irb works. You couldn't do that in a
    > real script. m.


    Why not? say_hello is now a method of Object, an ancestor of [1,3,5].
    Challenge: show us what the error is when it fails. :)

    Hugh
    Hugh Sasse, Oct 27, 2006
    #9
  10. Dave Rose

    matt neuburg Guest

    Hugh Sasse <> wrote:

    > On Sat, 28 Oct 2006, matt neuburg wrote:
    >
    > > Jason Merrill <> wrote:
    > >
    > > > And since Object is an ancestor of pretty much everything in ruby,
    > > > it's interesting to note that these methods are now defined for
    > > > practically everything in ruby:
    > > >
    > > > irb(main):001:0> def say_hello
    > > > irb(main):002:1> "Hello"
    > > > irb(main):003:1> end
    > > > => nil
    > > > irb(main):004:0> say_hello
    > > > => "Hello"
    > > > irb(main):005:0> [1,3,5].say_hello
    > > > => "Hello"

    > >
    > > But that's just a vagary of how irb works. You couldn't do that in a
    > > real script. m.

    >
    > Why not? say_hello is now a method of Object, an ancestor of [1,3,5].
    > Challenge: show us what the error is when it fails. :)


    matt-neuburgs-imac-g5:~ mattneub$ ruby

    def howdy
    puts "hi"
    end
    [1,2,3].howdy

    -:4: private method `howdy' called for [1, 2, 3]:Array (NoMethodError)

    m.



    --
    matt neuburg, phd = , http://www.tidbits.com/matt/
    Tiger - http://www.takecontrolbooks.com/tiger-customizing.html
    AppleScript - http://www.amazon.com/gp/product/0596102119
    Read TidBITS! It's free and smart. http://www.tidbits.com
    matt neuburg, Oct 27, 2006
    #10
  11. Dave Rose

    srdjan.m Guest

    Trans wrote:
    > Not Kernel, it becomes a private method of Object class.


    def widget(tidbit)
    tidbit
    end

    I was under the impression that the widget(tidbit) method becomes a
    private method of Kernel not Object.

    def hello
    "hello"
    end

    class Object
    def hello2
    "hello2"
    end
    private_class_method :hello2
    end

    Object.private_methods.include?("hello") => true
    Object.private_methods.include?("hello2") => true

    Kernel.private_methods.include?("hello") => true
    Kernel.private_methods.include?("hello2") => false

    The code above demonstrates that hello is private to both Kernel and
    Object as opposed to hello2 which is only private to Object.

    Am I making a silly deduction mistake somewhere?

    srdjan
    srdjan.m, Oct 27, 2006
    #11
  12. On 10/28/06, srdjan.m <> wrote:
    > Trans wrote:
    > > Not Kernel, it becomes a private method of Object class.

    >
    > def widget(tidbit)
    > tidbit
    > end
    >
    > I was under the impression that the widget(tidbit) method becomes a
    > private method of Kernel not Object.
    >
    > def hello
    > "hello"
    > end
    >
    > class Object
    > def hello2
    > "hello2"
    > end
    > private_class_method :hello2
    > end
    >
    > Object.private_methods.include?("hello") => true
    > Object.private_methods.include?("hello2") => true
    >
    > Kernel.private_methods.include?("hello") => true
    > Kernel.private_methods.include?("hello2") => false
    >
    > The code above demonstrates that hello is private to both Kernel and
    > Object as opposed to hello2 which is only private to Object.
    >
    > Am I making a silly deduction mistake somewhere?
    >


    I thought it was added to Kernel too, but it appears not to be the case:

    # test.rb
    module Kernel
    def self.method_added(m) puts "#{m} added to Kernel" end
    end

    class Object
    def self.method_added(m) puts "#{m} added to Object" end
    end

    def x
    end

    $ ruby test.rb
    x added to Object


    > srdjan
    >
    >
    >



    --
    - Simen
    Simen Edvardsen, Oct 27, 2006
    #12
  13. Dave Rose

    srdjan.m Guest

    On Oct 28, 12:48 am, "Simen Edvardsen" <> wrote:
    > # test.rb
    > module Kernel
    > def self.method_added(m) puts "#{m} added to Kernel" end
    > end
    >
    > class Object
    > def self.method_added(m) puts "#{m} added to Object" end
    > end
    >
    > def x
    > end
    >
    > $ ruby test.rb
    > x added to Object
    >
    > > srdjan--

    > - Simen


    very good point, I guess in my post I made a mistake of not thinking
    about "main" context.

    srdjan
    srdjan.m, Oct 28, 2006
    #13
    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. Neo
    Replies:
    1
    Views:
    506
    Scott Allen
    Jan 7, 2005
  2. David MacQuigg

    Is classless worth consideration

    David MacQuigg, Apr 29, 2004, in forum: Python
    Replies:
    33
    Views:
    848
    Erik Max Francis
    May 3, 2004
  3. Yermat

    [Classless] Just to be sure...

    Yermat, Apr 30, 2004, in forum: Python
    Replies:
    0
    Views:
    323
    Yermat
    Apr 30, 2004
  4. Robert Dober
    Replies:
    5
    Views:
    109
    Robert Dober
    Aug 4, 2007
  5. Kenneth McDonald
    Replies:
    5
    Views:
    301
    Kenneth McDonald
    Sep 26, 2008
Loading...

Share This Page