From: Smart RoR on 22 Mar 2010 22:11 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. -- Posted via http://www.ruby-forum.com/.
From: Robert Klemme on 23 Mar 2010 17:51 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 -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/
From: Smart RoR on 23 Mar 2010 18:00 Thanks robert. -- Posted via http://www.ruby-forum.com/.
From: Caleb Clausen on 23 Mar 2010 18:45 On 3/23/10, Robert Klemme <shortcutter(a)googlemail.com> wrote: > 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. 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>
From: Smart RoR on 23 Mar 2010 19:03 In the end, I wanted to see A as ancestor of B. No classes, only modules. -- Posted via http://www.ruby-forum.com/.
|
Next
|
Last
Pages: 1 2 Prev: less than sign for inheritance in classes Next: Persistent Instance Vars on Soap Server. |