Namespacing my classes

Z

Zouplaz

Hello, as I want to avoid name clashes I tried to organise them like
this (just a fake example, reflecting reality)

lib/mylib.rb contains
module Mylib

module TestDatas
FOO = "Ho yeah"
end

require 'somelib/tools'
require 'somelib/motor'
end

somelib/tools.rb contains
class Mylib::Tools
end

somelib/motor.rb contains
class Mylib::Motor

def something()
Mylib::TestDatas.FOO
end

end



Well, I did this by try/error until I had no more execution errors and
having them behaving as expected but is there any caveat ?

I'm just suprised by the location of the requires statements

Thanks
 
P

Pascal J. Bourguignon

Zouplaz said:
Hello, as I want to avoid name clashes I tried to organise them like
this (just a fake example, reflecting reality)

lib/mylib.rb contains
module Mylib

module TestDatas
FOO = "Ho yeah"
end

require 'somelib/tools'
require 'somelib/motor'
end

somelib/tools.rb contains
class Mylib::Tools
end

somelib/motor.rb contains
class Mylib::Motor

def something()
Mylib::TestDatas.FOO
end

end



Well, I did this by try/error until I had no more execution errors and
having them behaving as expected but is there any caveat ?

I'm just suprised by the location of the requires statements

You don't need to put these requires inside the module blocks.

Instead, you could write:

(module MyLib
(module TestData
(FOO = "abc")
end)
end)

(module MyLib
(class Tool
end)
end)

(module MyLib
(class Motor
(def something
(TestData::FOO)
end)
end)
end)

That is, if you avoid the (class Abc::Def::Ghi ... end) form, then
modules namespaces will be created automatically when needed.

Then, how you spread the forms over files and execute require is up to
you and doesn't matter much.
 
Y

Yossef Mendelssohn

(module MyLib
=A0 (module TestData
=A0 =A0 (FOO =3D "abc")
=A0 end)
end)

(module MyLib
=A0 (class Tool
=A0 end)
end)

(module MyLib
=A0 (class Motor
=A0 =A0 (def something
=A0 =A0 =A0 (TestData::FOO)
=A0 =A0 end)
=A0 end)
end)

What are all those parentheses about?
 
R

Robert Klemme

What are all those parentheses about?

Probably a Lisp fan. :)

$ ruby -cw <<XXX
(module MyLib
(module TestData
(FOO = "abc")
end)
end)
XXX
Syntax OK


To OP, usually this is structured a bit differently:

lib/mylib.rb contains

module MyLib

module TestData
FOO = "Ho yeah"
end

end

require 'mylib/tools'
require 'mylib/motor'


mylib/tools.rb contains

module MyLib
class Tools
end
end

mylib/motor.rb contains

module MyLib

class Motor
def something()
TestData::FOO
end
end

end


Btw, there is no plural of "data" in English AFAIK.

Kind regards

robert
 
Z

Zouplaz

le 13/10/2008 19:44, Robert Klemme nous a dit:
require 'mylib/tools'
require 'mylib/motor'


mylib/tools.rb contains

module MyLib
class Tools
end
end

mylib/motor.rb contains

module MyLib

class Motor
def something()
TestData::FOO
end
end

end


Btw, there is no plural of "data" in English AFAIK.

Ho, fine ! I didn't know I could reuse Module MyLib in several place to
enclose the classes...

About 'data', I trust you ;-) I wish I could find a webchat with people
willing to speak French with me, while speaking English with them - I
could learn a alot, but for the moment, I just found men masturbating in
the dark :))
 
R

Robert Klemme

le 13/10/2008 19:44, Robert Klemme nous a dit:


Ho, fine ! I didn't know I could reuse Module MyLib in several place to
enclose the classes...

Note also that you do not need the full namespace path when referencing
the const (see above).
About 'data', I trust you ;-) I wish I could find a webchat with people
willing to speak French with me, while speaking English with them - I
could learn a alot, but for the moment, I just found men masturbating in
the dark :))

Well, you never know what it is good for. :)

There is an IRB chat on freenode - albeit in English.

Cheers

robert
 
T

The Higgs bozo

Robert said:
There is an IRB chat on freenode - albeit in English.

IRB chat! Now that's an awesome typo. Or maybe a Freudian slip? You
know you're a programmer when the distinction between IRB and IRC is
blurred.
 
R

Robert Klemme

IRB chat! Now that's an awesome typo. Or maybe a Freudian slip? You
know you're a programmer when the distinction between IRB and IRC is
blurred.

LOL! It was definitively unconscious. I was probably distracted. I
leave the interpretation to you. :)

Cheers

robert


PS: Are you the unknown particle that they now cannot find because the
collider at Cern is broken?
 

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

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top