Module methods

U

Une Bévue

i wanted to have a Module method having the same name as another one
(from Kernel ?) :

module PlaySound
....
def PlaySound.rand
play a random sound
end
....
end

then i had a stack overflow and found renaming the method to
"PlaySound.random" was OK.

I don' understand because i thougth Modules are designed to avoid names
collision ?
 
J

Jesús Gabriel y Galán

2010/5/27 Une B=E9vue said:
i wanted to have a Module method having the same name as another one
(from Kernel ?) :

module PlaySound
...
=A0def PlaySound.rand
=A0 =A0 play a random sound
=A0end
...
end

then i had a stack overflow and found renaming the method to
"PlaySound.random" was OK.

I don' understand because i thougth Modules are designed to avoid names
collision ?

I guess you are doing something like this:

irb(main):001:0> module PlaySound
irb(main):002:1> def PlaySound.rand
irb(main):003:2> rand
irb(main):004:2> end
irb(main):005:1> end
=3D> nil
irb(main):006:0> PlaySound.rand
SystemStackError: stack level too deep
from (irb):3:in `rand'
from (irb):3:in `rand'
from (irb):6
from :0


The rand that you call inside the PlaySound.rand is itself, not
Kernel's rand. Try this instead:

irb(main):007:0> module PlaySound
irb(main):008:1> def PlaySound.rand
irb(main):009:2> Kernel.rand
irb(main):010:2> end
irb(main):011:1> end
=3D> nil
irb(main):012:0> PlaySound.rand
=3D> 0.821838053097397

Jesus.
 
U

Une Bévue

Jesús Gabriel y Galán said:
I guess you are doing something like this:

irb(main):001:0> module PlaySound
irb(main):002:1> def PlaySound.rand
irb(main):003:2> rand
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> PlaySound.rand
SystemStackError: stack level too deep
from (irb):3:in `rand'
from (irb):3:in `rand'
from (irb):6
from :0

RIGHT ! )))
The rand that you call inside the PlaySound.rand is itself, not
Kernel's rand. Try this instead:

irb(main):007:0> module PlaySound
irb(main):008:1> def PlaySound.rand
irb(main):009:2> Kernel.rand
irb(main):010:2> end
irb(main):011:1> end
=> nil
irb(main):012:0> PlaySound.rand
=> 0.821838053097397

i thought i had tried that too but may be with another error...

right know, after your advice, it works !

thanks !
 

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
474,262
Messages
2,571,048
Members
48,769
Latest member
Clifft

Latest Threads

Top