Singleton object vs. enhancing singleton class

Discussion in 'Ruby' started by Paul McMahon, Jun 9, 2008.

  1. Paul McMahon

    Paul McMahon Guest

    In ruby, as class are singleton objects, does anyone have any ideas when
    a a singleton object should be used vs. simply adding methods to the
    class? For example,

    class Foo
    include Singleton
    def bar
    end
    end

    vs.

    class Foo
    def self.bar
    end
    end
     
    Paul McMahon, Jun 9, 2008
    #1
    1. Advertising

  2. On Sunday 08 June 2008 22:35:25 Paul McMahon wrote:
    > In ruby, as class are singleton objects, does anyone have any ideas when
    > a a singleton object should be used vs. simply adding methods to the
    > class?


    I always include Singleton, but I see what you mean. A better way might be to
    do it with modules:

    module Foo
    def self.bar
    end
    end

    One example is mixins, though. For example, here:

    > class Foo
    > def self.bar
    > end
    > end


    A mixin would almost certainly be expecting to be mixed via "include" here,
    not "extend". This might not always matter, but some mixins will define
    things like self.included, and won't work at all if you try to extend them
    instead.

    However, a mixin which expected "extend" would still work on a Singleton
    object:

    class Foo
    include Singleton
    def bar
    end
    end
    Foo.instance.extend SomeMixin

    I think the main reason for doing Singleton, though, is that it expresses
    intent better, and it prevents the class from being instantiated -- sure,
    there are ways around it, but you're not going to accidentally call Foo.new
    without getting an error.
     
    David Masover, Jun 9, 2008
    #2
    1. Advertising

  3. In reply to myself:

    > it prevents the class from being instantiated


    To clarify -- prevents it from being instantiated again.
     
    David Masover, Jun 9, 2008
    #3
  4. Hi --

    On Mon, 9 Jun 2008, Paul McMahon wrote:

    > In ruby, as class are singleton objects, does anyone have any ideas when


    I'd just say: classes are objects. Like other objects, they can have
    methods added to them on a per-object basis (give or take the fact
    that "per-object" in the case of a class actually includes
    subclasses).

    > a a singleton object should be used vs. simply adding methods to the
    > class? For example,
    >
    > class Foo
    > include Singleton
    > def bar
    > end
    > end
    >
    > vs.
    >
    > class Foo
    > def self.bar
    > end
    > end


    I don't see these techniques as addressing the same problem or being
    likely candidates to replace each other. I'd go by what you need. If
    you need a class that has only one instance, then use Singleton. If
    you've got a situation where there's class-level (as opposed to
    instance-level) knowledge involved, then use a class method.


    David

    --
    Rails training from David A. Black and Ruby Power and Light:
    INTRO TO RAILS June 9-12 Berlin
    ADVANCING WITH RAILS June 16-19 Berlin
    ADVANCING WITH RAILS July 21-24 Edison, NJ
    See http://www.rubypal.com for details and updates!
     
    David A. Black, Jun 9, 2008
    #4
    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. Dmitriy Zakharov

    Enhancing ASP.NET Framework

    Dmitriy Zakharov, Sep 3, 2004, in forum: ASP .Net
    Replies:
    9
    Views:
    408
    Patrice
    Sep 6, 2004
  2. =?ISO-8859-1?Q?Christian_Brechb=FChler?=

    Enhancing valarray with "normal" arithmetic operators

    =?ISO-8859-1?Q?Christian_Brechb=FChler?=, Sep 12, 2003, in forum: C++
    Replies:
    6
    Views:
    982
    =?ISO-8859-1?Q?Christian_Brechb=FChler?=
    Sep 14, 2003
  3. Replies:
    0
    Views:
    327
  4. Benjamin Scott
    Replies:
    0
    Views:
    274
    Benjamin Scott
    Sep 28, 2004
  5. Charles Oliver Nutter

    Singleton methods without the singleton class

    Charles Oliver Nutter, Mar 15, 2010, in forum: Ruby
    Replies:
    4
    Views:
    215
    Charles Oliver Nutter
    Mar 22, 2010
Loading...

Share This Page