Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
code organization
Li Chen
6/6/2009 4:07:00 PM
Hi all,
What are the differences bewteen the following code organization?
What situations are preferred by each one?
Thanks,
Li
#######code 1#############
module A
class B end
class C end
end
#######code 2#############
class B
include module A
end
class C
include module A
end
--
Posted via
http://www.ruby-...
.
4 Answers
Brian Candler
6/6/2009 4:54:00 PM
0
Li Chen wrote:
> What are the differences bewteen the following code organization?
> What situations are preferred by each one?
In code 1, module A is just acting as a namespace, so that you have two
classes, A::B and A::C. This is useful to ensure that your class names
don't stomp on anyone else's use of the same names. All you have to do
is ensure name A is unique.
Code 2 doesn't run as it stands, so you need to rewrite as:
module A; end
class B
include module A
end
class C
include module A
end
In this case, instance methods defined in module A are available in both
class B and class C. This is almost the same as subclassing B and C from
class A. B and C also get access to any constants defined in the A
namespace, without needing the A:: prefix.
So in summary: they achieve two completely different ends (namespace
separation, and method sharing, respectively)
--
Posted via
http://www.ruby-...
.
Li Chen
6/6/2009 6:00:00 PM
0
Brian Candler wrote:
> So in summary: they achieve two completely different ends (namespace
> separation, and method sharing, respectively)
Hi Brian,
Thank you so much.
As I recall correctly module has two major funtions/purposes:
1) namespace separation 2) mixin. So you mean in the second code it
works as a mixin or method sharing?
Li
--
Posted via
http://www.ruby-...
.
matt
6/6/2009 7:29:00 PM
0
Li Chen <chen_li3@yahoo.com> wrote:
> Hi all,
>
> What are the differences bewteen the following code organization?
> What situations are preferred by each one?
>
> Thanks,
>
> Li
>
> #######code 1#############
> module A
> class B end
> class C end
> end
>
>
>
> #######code 2#############
> class B
> include module A
> end
>
> class C
> include module A
> end
They are totally different, and they illustrate the two main purposes of
a module. Neither is legal as you have it so I will change the code to
make it legal.
##### 1 ######
module A
class B
end
end
A::B.new
A is a namespace, so you must say A::B from outside module A to refer to
B.
##### 2 #####
module A
def hello
p "howdy"
end
end
class B
include A
end
B.new.hello
Module A's instance methods are copied into class B as instance methods
("mixin").
m.
--
matt neuburg, phd = matt@tidbits.com,
http://www.tidbits...
Leopard -
http://www.takecontrolbooks.com/leopard-custom...
AppleScript -
http://www.amazon.com/gp/product/...
Read TidBITS! It's free and smart.
http://www.t...
Brian Candler
6/7/2009 5:37:00 PM
0
Li Chen wrote:
> As I recall correctly module has two major funtions/purposes:
> 1) namespace separation 2) mixin. So you mean in the second code it
> works as a mixin or method sharing?
Yes, mixin or method sharing (two terms to describe the same thing)
Re-reading, there's another error I didn't fix in that example: it
should say "include A" not "include module A"
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
code organization
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password