Module A extends Moudle B possible?

Hello:

Can Modules extends within themselves?

Like Class A < B is Valid, where B is another class
Module X < Y is invalid, where Y is another module?

Thanks.

On 03/23/2010 03:11 AM, Smart RoR wrote:

Can Modules extends within themselves?

Like Class A < B is Valid, where B is another class
Module X < Y is invalid, where Y is another module?

Not directly. But you can use #included like this:

irb(main):001:0> module A; end
=> nil
irb(main):002:0> module B
irb(main):003:1> def self.included(cl)
irb(main):004:2> cl.class_eval { include A }
irb(main):005:2> end
irb(main):006:1> end
=> nil
irb(main):007:0> class X
irb(main):008:1> include B
irb(main):009:1> end
=> X
irb(main):010:0> X.ancestors
=> [X, A, B, Object, Kernel, BasicObject]
irb(main):011:0>

Note however that the inheritance order is reversed. There are a number
of other ways to achieve what you want. The requirement does not seem
to come up very frequently though. So maybe it’s not an issue as big as
you think.

Kind regards

robert

Thanks robert.

On 3/23/10, Robert K. [email protected] wrote:

irb(main):002:0> module B
=> [X, A, B, Object, Kernel, BasicObject]
irb(main):011:0>

Note however that the inheritance order is reversed. There are a number
of other ways to achieve what you want. The requirement does not seem
to come up very frequently though. So maybe it’s not an issue as big as
you think.

Am I missing something? Why not just include A from B? Like this:

irb(main):001:0> module A; end
=> nil
irb(main):002:0> module B include A end
=> B
irb(main):003:0> class X
irb(main):004:1> include B
irb(main):005:1> end
=> X
irb(main):006:0> X.ancestors
=> [X, B, A, Object, Kernel]
irb(main):007:0>

On 3/23/10, Smart RoR [email protected] wrote:

In the end, I wanted to see A as ancestor of B.
No classes, only modules.

So, then, you should use include, I think. It’s like inheiritance, but
for modules:

module A;end
module B include A end
B.ancestors #=> [B, A]

In the end, I wanted to see A as ancestor of B.
No classes, only modules.

2010/3/23 Caleb C. [email protected]:

Am I missing something? Why not just include A from B? Like this:

I am the one missing something. I had this nagging feeling that
there must be a simpler way but apparently I was too tired to take it
seriously. Thanks for the correction!

Kind regards

robert