modules including other modules

T

Tim Olsen

Hello,

It appears that including module A inside another module B can cause
problems for classes that have already included A. What seems to
happen is that a class can only see the methods from module B if that
class include module A before module A includes module B.

For example,

module A

def a
puts "a"
end

end

module B

def b
puts "b"
end

end

class C

include B

def c
puts "c"
end

end

module B

include A

def b2
puts "b2"
end
end


C.new.c
C.new.b
C.new.b2
C.new.a

produces

tolsen@neurofunk:~/svn/limeade$ /var/tmp/tst.rb
c
b
b2
/var/tmp/tst.rb:42: undefined method `a' for #<C:0x2ac204fe7180> (NoMethodError)

Notice I can define b2() after C has already included B but including
A into B does nothing for C.

Any idea what's going on here?

Thanks,
Tim
 
J

Jeremy Henty

It appears that including module A inside another module B can cause
problems for classes that have already included A. What seems to
happen is that a class can only see the methods from module B if
that class include module A before module A includes module B.

It's a known problem that is apparently almost impossible to fix. See
http://eigenclass.org/hiki/The+double+inclusion+problem .

Unless there's been some development that I've failed to Google up,
your only option is "Don't Do That!". :-( Unless Ruby 1.9 handles
things better.

Regards,

Jeremy Henty
 
T

Trans

It's a known problem that is apparently almost impossible to fix. Seehttp://eigenclass.org/hiki/The+double+inclusion+problem.

Also know as the "Dynamic Inclusion Problem" or just the "Inclusion
Problem".
Unless there's been some development that I've failed to Google up,
your only option is "Don't Do That!". :-( Unless Ruby 1.9 handles
things better.

While, it would be great if someone did find a way, from what I
understand its too difficult to fix given how Ruby works, so don't
hold your breath.

T.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,153
Members
46,701
Latest member
XavierQ83

Latest Threads

Top