I'm learning ruby, I come up on something that I don't understand. I know that modules in ruby are used for namespacing with :: (or .) and mixing with include directive.
The problem comes when I group some methods inside a module, without putting them inside a class.
Here's an example:
#this will not work
return "How old are you?"
#this will work
return "What's up?"
# this call returns **NoMethodError**
# this call works fine
The Ruby documentation on Module answers this in its introduction text.
module Familiar def ask_age return "How old are you?" end end
#ask_age as an instance method on Familiar. However, you can't instantiate Modules, so you can't get to their instance methods directly; you mix them into other classes. Instance methods in modules are more or less unreachable directly.
This form, by comparison:
module Familiar def self.ask_age return "What's up?" end end
::ask_age as a module function. It is directly callable, and does not appear on included classes when the module is mixed into another class.