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
end
def tax(gross)
tax = gross - net(gross)
end
end
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)
Some other Articles
Some Linux and Unix tipsMelksham Chamber of Commerce and IndustryRuby to access web servicesRuby mixins, modules, require and includeFind the linkRuby Programming Course - Saturday and SundayKeys to friendless churchesHiding a MySQL database behind a web pageRecession? 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).
|
|