Forum: Ruby Initialization using the Singleton design pattern

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jonathan L. (Guest)
on 2006-01-05 20:57
(Received via mailing list)
Hi,

I have a singleton class, as in one that does "include Singleton". I
want to run a few methods when the instance is created. Usually one
would do that in initialize(), but obviously I can't do that here. This
is what I've thought of but it raises an error which says "super: no
superclass method `instance'"

class SingletonClass < ParentClass
  include Singleton

  def self.instance
    super
    # initialization code here
  end
end

What am I doing wrong?

Cheers
James G. (Guest)
on 2006-01-07 14:37
(Received via mailing list)
On Jan 5, 2006, at 12:19 PM, Jonathan L. wrote:

> Hi,
>
> I have a singleton class, as in one that does "include Singleton". I
> want to run a few methods when the instance is created. Usually one
> would do that in initialize(), but obviously I can't do that here.

Why not?  The object is still constructed:

 >> require "singleton"
=> true
 >> class JustOne
 >>   def initialize
 >>     puts "initialize() called"
 >>   end
 >>   include Singleton
 >> end
=> JustOne
 >> JustOne.instance
initialize() called
=> #<JustOne:0x32321c>
 >> JustOne.instance
=> #<JustOne:0x32321c>

James Edward G. II
Austin Z. (Guest)
on 2006-01-07 14:37
(Received via mailing list)
On 05/01/06, Jonathan L. <removed_email_address@domain.invalid> wrote:
> I have a singleton class, as in one that does "include Singleton". I
> want to run a few methods when the instance is created. Usually one
> would do that in initialize(), but obviously I can't do that here. This
> is what I've thought of but it raises an error which says "super: no
> superclass method `instance'"

Right. Just use #initialize as normal, though.

-austin
Jonathan L. (Guest)
on 2006-01-07 14:37
(Received via mailing list)
On Fri, 2006-01-06 at 03:47 +0900, James Edward G. II wrote:
>  >> require "singleton"
> => #<JustOne:0x32321c>
>  >> JustOne.instance
> => #<JustOne:0x32321c>

Okay thanks, I've got it sorted now. I had tried using initialize()
previously but I guess I got put off as what I was doing raised an
exception -- so I assumed you weren't supposed to use initialize()
without thinking about it any harder.

Cheers
This topic is locked and can not be replied to.