On Sat, Dec 10, 2011 at 12:39 PM, Vadim P. [email protected]

wrote:

end when i write “puts g” i have a error. I try write Math.mod but

nothing.

“rb:4: undefined method `Module’ for Math:Module (NoMethodError)”

For the module Math, you can easily see the documented

instance and class methods with

$ ri Math

The term “Module” is not one of them, so that is why you

get the error:

“undefined method `Module’ for Math:Module (NoMethodError)”

You can use the module methods with

Math.sin(0.75)

You can use the instance methods with

include Math

sin(0.75)

Regarding your question how to write a module,

as example, I have written an Average module:

[email protected]:~$ cat average.rb

module Average

def geometric(*a)

case a.size

when 0

raise “At least one argument required”

when 1

a[0]

when 2

Math.sqrt(a[0]*a[1])*

else

(a.inject(1){|acc,e| acce})**(1.0/a.size)

end

end

def arithmetic(*a)

case a.size

when 0

raise “At least one argument required”

when 1

a[0]

else

(a.inject(0){|acc,e| acc+e})/Float(a.size) # force a float

end

end

end

and when I ‘include’ that, I can use the methods as instance

methods (on main).

An alternative would have been to define both methods as

module methods (with “def self.geometric”). This would have

the advantage of avoiding polluting the general name space

with the “include Average” .

[email protected]:~$ irb

001:0> require ‘average’

=> true

002:0> include Average

=> Object

003:0> geometric()

RuntimeError: At least one argument required

from ./average.rb:5:in `geometric' from (irb):3 004:0> geometric(4) => 4 005:0> geometric(4,9) => 6.0 006:0> geometric(4,9,48) => 12.0 007:0> arithmetic() RuntimeError: At least one argument required from ./average.rb:18:in`

arithmetic’

from (irb):7

008:0> arithmetic(7)

=> 7

009:0> arithmetic(4,7)

=> 5.5

010:0> arithmetic(4,7,6,9)

=> 6.5

In my “Average” module, I have now used the Math.sqrt

module function of the Math module to demonstrate the

proper use of such a module function.

HTH,

Peter