Modules in Ruby

I have this script with slight change from “The Little Book Of Ruby”:

http://pastie.org/private/6wgnmrtsodlmbh3ib1vg

If I type the following: puts MyModule.greet

I get the required result.

But, there is an instance method inside the module “greet”. How can I
call that method at the time modules CANNOT be instantiated?

Thanks.

And, a small thing here. Can we say that “Modules” in Ruby are like
“Packages” in Java?

Thanks.

On Wed, Jul 14, 2010 at 6:33 PM, Abder-Rahman A.
[email protected] wrote:

I have this script with slight change from “The Little Book Of Ruby”:

http://pastie.org/private/6wgnmrtsodlmbh3ib1vg

If I type the following: puts MyModule.greet

I get the required result.

But, there is an instance method inside the module “greet”. How can I
call that method at the time modules CANNOT be instantiated?

Include it in a class

class MyClass
include MyModule
end

a = MyClass.new
a.greet

martin

On Wed, Jul 14, 2010 at 6:39 PM, Abder-Rahman A.
[email protected] wrote:

And, a small thing here. Can we say that “Modules” in Ruby are like
“Packages” in Java?

Modules in ruby serve a dual role as namespaces and mixins. You can
think of a mixin as a Java interface, but one that can have concrete
methods.

Check out the following:
http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

and play with some code till it clicks. It’s a very useful part of the
language.

martin

Thanks a lot Martin. Yes, “include” was the missing part.

A small thing here:

When I type:

puts MyModule::GOODMOODE

In the purpose of accessing a module’s constant, I get the following:

uninitialized constant MyModule::GOODMOODE (NameError)

Although having the include.

How can I access a module’s constant.

And, when reading about modules, the resources I saw so far mention that
modules includes:

1- Constants.
2- Methods.
3- Classes.

Don’t they include variables?!

Thanks.

In your private pastie, you have GOODMOOD, not GOODMOODE. I think this
could be why. Accessing MyModule::GOODMOOD worked.

On Wed, Jul 14, 2010 at 09:45, Abder-Rahman A.

Steve Kim wrote:

In your private pastie, you have GOODMOOD, not GOODMOODE. I think this
could be why. Accessing MyModule::GOODMOOD worked.

On Wed, Jul 14, 2010 at 09:45, Abder-Rahman A.

Thanks everyone for your replies.