Namespacing my classes


#1

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


#2

Zouplaz removed_email_address@domain.invalid writes:

require ‘somelib/tools’
def something()
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.


#3

On Oct 13, 9:12 am, removed_email_address@domain.invalid (Pascal J. Bourguignon)
wrote:

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

What are all those parentheses about?


#4

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

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 :wink: 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 :-))


#5

On 13.10.2008 18:49, Yossef M. wrote:

end)
What are all those parentheses about?
Probably a Lisp fan. :slight_smile:

$ 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


#6

On 13.10.2008 21:12, Zouplaz wrote:

class Tools
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…

Note also that you do not need the full namespace path when referencing
the const (see above).

About ‘data’, I trust you :wink: 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. :slight_smile:

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

Cheers

robert


#7

On 13.10.2008 22:43, The Higgs bozo wrote:

Robert K. wrote:

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.

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

Cheers

robert

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


#8

Robert K. wrote:

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.