From: Kero van Gelder Date: 2001-06-27T07:28:37+09:00 Subject: [ruby-talk:16937] Re: rb_define_class() vs Class.new() > |Guy, > I'm sorry that I'm not Guy. But I believe you admit me. no problem :) > |What would be the semantics of > | a = Class.new() > | A, B = a, a > | p a.name > |? > |(without giving any implementation detail, pls) > > Unnamed class object is referenced from two constants A and B. When > a.name is called (or whenever class name is required), Ruby looks for > the class name via internal constant table. Since constant table is a > hash, it's hard to tell name would be either A or B. 1) I asked to leave implementation details out of this. I think a hash is such a detail :) 2) A, B = a, a sets a.name() to return B (on my machine?), however A = a; B = a sets a.name() to return A, so I probably don't understand which hash you mean anyway. > |What looks nicer: > | - Object.const_set("A", Class.new) > | - eval("class A; end") > | - Class.new("A") > | - I don't use classes > - A = Class.new > > You can access the class via A whatever its name is. Class name is > just a name. The name of a class is _the_ name of that class. I do not understand what you mean with ``just a name''. Or is it that a class can have many names? Like, a name is a reference to a class, instead of a property of the class. In that case, why can't I ask for all references/names? I still don't get /why/ this is done like it is; optimization? memory savings? It still feels like a side-effect abc = Class.new() # abc has no name A = abc # create constant A, do not touch abc in any way and # suddenly abc has a name! xyz = Class.new() # xyz has no name A = xyz # Warning! Already initialized constant A! # and both abc and xyz are classes with the # name A (though A.new() is still uniquely # defined, of course) I even like the fact that you say A.new() instead of new A(); probably one of the few useful ways to guarantee some consistency is through the use of global references; so perhaps the concept ``name'' is not as useful as in Java anyway. If so, why not drop the notion entirely? Bye, Kero. PS: I'm rambling, I'm confused and I'm curious. +--- Kero ------------------------------ kero@chello.nl ---+ | Don't split your mentality without thinking twice | | Proud like a God -- Guano Apes | +--- M38c ------------------ http://huizen.dds.nl/~kero ---+