On Fri, Dec 09, 2005 at 12:50:40PM +0900, ara.t.howard / noaa.gov wrote: > this will fail for "ModuleA::ModuleB". for that you need something like: > > # > # creates a class by class name > # > def klass_stamp(hierachy, *a, &b) > #--{{{ > ancestors = hierachy.split(%r/::/) > parent = Object > while((child = ancestors.shift)) > klass = parent.const_get child > parent = klass > end > klass::new(*a, &b) > #--}}} > end def klass_stamp(name, *a, &b) name.split(/::/).inject(Object){|s,x| s.const_get(x)}.new(*a,&b) end class A; class B; def foo; "A::B#foo" end end end klass_stamp("A::B").foo # => "A::B#foo" > this will work for > > m = klass_stamp "A::B::C::Module" # ^ # that would try to instantiate the module m = "A::B::C::Module".split(/::/).inject(Object){|s,x| s.const_get(x)} > o = Object::new > o.extend m PS: have you seen http://eigenclass.org/hiki.rb?Usable+Ruby+folding+for+Vim ? It might be of interest to you if you often use manual markers for methods... -- Mauricio Fernandez