hello,
is this a proper way to do it:
name = 'MyModule'
o = Object.new
o.extend(Module.const_get(name))
are there better ways?
thanks
konstantin
hello,
is this a proper way to do it:
name = 'MyModule'
o = Object.new
o.extend(Module.const_get(name))
are there better ways?
thanks
konstantin
this will fail for "ModuleA::ModuleB". for that you need something like:
On Fri, 9 Dec 2005, ako... wrote:
hello,
is this a proper way to do it:
name = 'MyModule'
o = Object.new
o.extend(Module.const_get(name))are there better ways?
#
# 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
this will work for
m = klass_stamp "A::C::Module"
o = Object::new
o.extend m
it's in alib.rb btw.
hth.
ara [dot] t [dot] howard [at] noaa [dot] gov
all happiness comes from the desire for others to be happy. all misery
comes from the desire for oneself to be happy.
-- bodhicaryavatara
===============================================================================
I don't know if this is the proper way, but you could just eval the name:
name = 'MyModule'
o = Object.new
o.extend( eval name )
Or alternatively:
eval("o.extend #{name}")
On Thu, 08 Dec 2005 18:37:43 -0800, ako... wrote:
hello,
is this a proper way to do it:
name = 'MyModule'
o = Object.new
o.extend(Module.const_get(name))
--
Ross Bamford - rosco@roscopeco.remove.co.uk
"\e[1;31mL"
require 'facet/kernel/constant'
name = 'MyModule'
o = Object.new
o.extend(constant(name))
T.
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:
:C::Module"
# ^
# that would try to instantiate the module
m = "A::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...
we have dueling libraries tom!
guess the fact that we are both writing these function over and over means
they are useful.
cheers.
-a
On Fri, 9 Dec 2005, Trans wrote:
require 'facet/kernel/constant'
name = 'MyModule'
o = Object.new
o.extend(constant(name))T.
ara [dot] t [dot] howard [at] noaa [dot] gov
all happiness comes from the desire for others to be happy. all misery
comes from the desire for oneself to be happy.
-- bodhicaryavatara
===============================================================================