[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

class design

Spitfire

12/25/2006 7:55:00 PM

How do I design a class such that it can never be instantiated? Say
for example a class containing static members alone, which requires no
instantiation!

--
_ _ _]{5pitph!r3}[_ _ _
__________________________________________________
?I'm smart enough to know that I'm dumb.?
- Richard P Feynman
2 Answers

Robert Klemme

12/25/2006 7:57:00 PM

0

On 25.12.2006 20:54, Spitfire wrote:
> How do I design a class such that it can never be instantiated? Say
> for example a class containing static members alone, which requires no
> instantiation!

You can apply some tactics to make it harder but AFAIK there is no safe
way to completely prevent instantiation. Typically something like this
will suffice

class Foo
def self.new(*a,&b) raise "Must not instantiate!" end
end

irb(main):004:0> Foo.new
RuntimeError: Must not instantiate!
from (irb):2:in `new'
from (irb):4
from :0

Other than that you can also use module Singleton, which is probably
better documentation wise:

irb(main):005:0> require 'singleton'
=> true
irb(main):006:0> class Bar
irb(main):007:1> include Singleton
irb(main):008:1> end
=> Bar
irb(main):009:0> Bar.new
NoMethodError: private method `new' called for Bar:Class
from (irb):9
from :0

Kind regards

robert

James Gray

12/25/2006 8:02:00 PM

0

On Dec 25, 2006, at 1:55 PM, Spitfire wrote:

> How do I design a class such that it can never be instantiated?
> Say for example a class containing static members alone, which
> requires no instantiation!

Just use a module for this:

module Static
# ... defined constants and methods here ...
end

James Edward Gray II