From: =?ISO-8859-1?Q?Une_B=E9vue?= on
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 ?
--
� L� o� la v�rit� n'est pas libre,
la libert� n'est pas vraie. �
(Jacques Pr�vert)
From: Jesús Gabriel y Galán on
2010/5/27 Une Bévue <unbewusst.sein(a)google.com.invalid>:
> 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 ?

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.

From: =?ISO-8859-1?Q?Une_B=E9vue?= on
Jes�s Gabriel y Gal�n <jgabrielygalan(a)gmail.com> wrote:

> 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 !
--
� L� o� la v�rit� n'est pas libre,
la libert� n'est pas vraie. �
(Jacques Pr�vert)