From: "Jesús Gabriel y Galán" Date: 2010-05-27T23:29:29+09:00 Subject: Re: Module methods 2010/5/27 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 ? 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.