Sam Roberts wrote:
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:
You could make them private and use #send to access them from your
constructors.
class Foo
private_class_method :newprivate :create
private :decode
def Foo.create(*args)
new.send :create, *args
end def Foo.decode(*args)
new.send :decode, *args
end def create(a, b) puts "create(#{a},#{b})" self end def decode(a) puts "decode(#{a})" self end
private :create
private :decode
end
Foo.create(1,2)
Foo.decode(3)Foo.decode(4).decode(5) # Should NOT work!
Now, the last line gives an error.