On 12/2/2010 2:20 PM, Serialhex .. wrote:
> so, i dont believe that i've done anything wrong, but i cant seem to get
> a module to function properly, mabye i'm doing something stupidly
> retartedly wrong, i dont know, but i've even typed it into irb and i get
> the same thing.  ruby keeps telling me that my method is undefined.
> heres the output from irb:
> 
> irb(main):001:0> module DSP
> irb(main):002:1> include Math
> irb(main):003:1> def sinc(x)
> irb(main):004:2> sin(PI*x)/PI*x
> irb(main):005:2> end
> irb(main):006:1> end
> => nil
> irb(main):007:0> DSP.public_instance_methods
> => [:sinc]
> irb(main):008:0> DSP.sinc(0)
> NoMethodError: undefined method `sinc' for DSP:Module
>         from (irb):8
>         from C:/Ruby192/bin/irb:12:in `<main>'
> irb(main):009:0> sin 0
> NoMethodError: undefined method `sin' for main:Object
>         from (irb):9
>         from C:/Ruby192/bin/irb:12:in `<main>'
> irb(main):010:0> Math.sin(0)
> => 0.0
> irb(main):011:0> exit
> 
> as you can see i even tried to call Math.sin the same way i called
> DSP.sinc and that worked... idfk what's wrong, i've looked through what
> stuff i have and it dosnt seem to make any sence so hopefully someone
> with more programming knowhow can help me.

You defined an instance method for DSP, but you need to call it as a
class method.  The problem then is that your sinc method will need to
call sin also as a class method, so you need to extend Math rather than
include it.  Try the following:

module DSP
  extend Math
  def self.sinc(x)
    sin(PI*x)/PI*x
  end
end

-Jeremy