From: Sam Roberts Date: 2004-04-26T04:20:11+09:00 Subject: How do I get multiple constructors? I'm aware of the case where you have a few constructors, but they are implemented as some kind of "syntax sugar" on top of one constructor that does all the work (the example from "Singletons and other Constructors" in Pickaxe chapter 3). I have two *different* ways of creating an object, and I can't write them all in terms of one single constructor. Also, I can't write them in terms of public methods of the object (they set up internal things that can't be changed by the public). I thought I could do this: class Foo private_class_method :new # private :create # private :decode def Foo.create(*args) new.create(*args) end def Foo.decode(*args) new.decode(*args) end def create(a, b) puts "create(#{a},#{b})" self end def decode(a) puts "decode(#{a})" self end end Foo.create(1,2) Foo.decode(3) Foo.decode(4).decode(5) # Should NOT work! But I'm not happy with it. I don't want it to be possible for the constructor methods to be called on an object by anything other than the Foo.*() constructors, but I can't limit the access to only methods of Foo. This is starting to feel ridiculously hard, I must be missing something, how is this supposed to be done? Sam