Ruby namespace question

Z

Zhao Yi

I require two ruby files which include two classes with the same name.
how can I specify which class I use?
 
R

Ryan Davis

I require two ruby files which include two classes with the same name.
how can I specify which class I use?

class X; end # x.rb
class X; end # y.rb

same class, only one to specify. Files mean nothing in ruby, they're
just vehicles for the parser.
 
Z

Zhao Yi

Ryan said:
class X; end # x.rb
class X; end # y.rb

same class, only one to specify. Files mean nothing in ruby, they're
just vehicles for the parser.

For this code:

require 'x.rb'
require 'y.rb'
X.new #which class it uses, can I specify the class like x.X or y.X?
 
T

Tom Cloyd

Zhao said:
For this code:

require 'x.rb'
require 'y.rb'
X.new #which class it uses, can I specify the class like x.X or y.X?
Why not answer this empirically? Try it out!

t.

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< (e-mail address removed) >> (email)
<< TomCloyd.com >> (website)
<< sleightmind.wordpress.com >> (mental health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
Z

Zhao Yi

Tom said:
Why not answer this empirically? Try it out!

I have tried but failed. This is my code:

logger=log4r.Logger.new

and I got the error: undefined local variable or method log4r
 
J

Justin Collins

Zhao said:
I have tried but failed. This is my code:

logger=log4r.Logger.new

and I got the error: undefined local variable or method log4r

I think you want

logger = Log4r.Logger.new

or

logger = Log4r::Logger.new

But, glancing at the docs, you also need to specify a name for it, like

logger = Log4r::Logger.new "mylog"


Hope that helps.

-Justin
 
B

Brian Candler

Zhao said:
For this code:

require 'x.rb'
require 'y.rb'
X.new #which class it uses, can I specify the class like x.X or y.X?

Nope - there is only one class X. Which file it was (first) defined in
makes no difference. If you require 'x.rb' first then class X is
created, and when you require 'y.rb' new methods are added into the
*same* class.

If you want them to be different, define them in different namespaces.
This is what Log4r:: does (it refers to the namespace, not the file)

module One; class X; end; end # x.rb
module Two; class X; end; end # y.rb

require 'x'
require 'y'
One::X.new # this is the one defined in x.rb
Two::X.new # this is the one defined in y.rb
 

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,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top