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 ?
2010/5/27 Une Bévue [email protected]:
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
=> 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
=> nil
irb(main):012:0> PlaySound.rand
=> 0.821838053097397
Jesus.
Jesús Gabriel y Galán [email protected] wrote:
from (irb):3:in `rand'
from (irb):3:in `rand'
from (irb):6
from :0
RIGHT ! )))
=> 0.821838053097397
i thought i had tried that too but may be with another error…
right know, after your advice, it works !
thanks !