Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
For 2023 - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Ruby mixins, modules, require and include

A Ruby "mixin" is a way of adding extra code from a module into a class - thus giving the programmer the ability to share code between a number of classes in a way that's in addition to inheritance. So - in effect - it gives multiple inheritance.

In some ways, you can compare a mixin to a (Java) interfaces which defines extra methods that you MUST have in a Java class in order for it to complete (implement) an interface. However, a Java interface is all to do with meeting the rules of the extra methods that must be provided and doesn't bring in any code at all, whereas in Ruby there are no such rules to be enforced (Ruby assumes you know what you are doing) and the mixin is all about bringing in the extra code.

We've got an example of a module for use in a mixin at tcalc.rb and a file that contains a class that uses it, together with a test harness here.

I have also written an example today that:
• loads a module via require
• then imports its namespace via include
which are the same basic principles as used in the mixin ... and I'm going to paste the source code below. Remember that require and include do different things in Ruby to they do in Perl ... in Ruby, require is used to load in a file (which probably contains a module) and include then brings its namespace into the current namespace.

Example: here's the file taxcalc.rb

module Taxcalc
  VAT_RATE = 17.5
  def net(gross)
    net = gross / (100.0 + VAT_RATE) * 100.0
    return net
  def tax(gross)
    tax = gross - net(gross)

And here's a sample program that uses it

# Drag in the file ...
require "taxcalc"
# And merge in its namespace
include Taxcalc
amount = 70.50
# because of the include, no need to say Taxcalc::net, etc
shopkeeper = net(amount)
vatman = tax(amount)
print "#{vatman} to the taxman\n"
print "#{shopkeeper} to the supplier\n"
print "Tax rate is #{VAT_RATE}\n"

See also here for a further example of modules, mixing and comparators in Ruby.

Code example written to illustrate our Ruby Training Courses
(written 2008-11-16)

Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
R119 - Ruby Miscellany
  [1181] Good Programming practise - where to initialise variables - (2007-05-09)
  [1586] Variable types in Ruby - (2008-03-21)
  [1720] Some Ruby lesser used functions - (2008-07-26)
  [1890] MySQL database from Ruby - an example - (2008-11-16)
  [3155] Rake - a build system using code written in Ruby - (2011-02-03)
  [3428] How many days to Christmas? - (2011-09-09)
  [3622] Loading Ruby classes - where does Ruby look? - (2012-02-24)
  [3783] Load path, load and require in Ruby, and a change from 1.8 to 1.9 - (2012-06-24)
  [3799] Ruby Documentation through rdoc - (2012-07-07)

Back to
Find the link
Previous and next
Horse's mouth home
Forward to
MySQL database from Ruby - an example
Some other Articles
Some Linux and Unix tips
Melksham Chamber of Commerce and Industry
Ruby to access web services
Ruby mixins, modules, require and include
Find the link
Ruby Programming Course - Saturday and Sunday
Keys to friendless churches
Hiding a MySQL database behind a web page
Recession? Depression?
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page

This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2023: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/1889_Rub ... clude.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb