Include constants from one scope into another ( A::* )


#1

Hello! Is there a way to include constants from one class into another?
Something like “include A::*”?

SAMPLE:

class A
    class B; end
    class C; end
    class D; end
end

class E
    # include A::*
    B; C; D;
end

#2

2008/12/29 Alexey P. removed_email_address@domain.invalid:

class E
# include A::*
B; C; D;
end

robert@fussel ~
$ ruby <<EOF

D=::a::smiley:
end
p E::C.new
EOF
#<A::C:0x1002ebc0>

robert@fussel ~
$

You can as well do something like this

class Module
def import_all(mod)
mod.constants.each do |c|
const_set(c, mod.const_get©)
end
end
end

irb(main):016:0> class E
irb(main):017:1> import_all A
irb(main):018:1> end
=> [“C”, “B”, “D”]
irb(main):019:0> E::B.new
=> #<A::b:0x7ff60548>

Kind regards

robert


#3

Thanks! :slight_smile:


#4

On Dec 29, 3:32 pm, Alexey P. removed_email_address@domain.invalid wrote:

class E
    # include A::*
    B; C; D;
end


Posted viahttp://www.ruby-forum.com/.

module Foo
class A; end
class B; end
class C; end
end

module Bar
include Foo
end

Bar::A.new

HTH,