This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Simulating Multiple Inheritance with Mixins | ||
---|---|---|
Code | Expected | Actual |
require 'set' # Deals with a collection of unordered values with no duplicates |
Include this module to make your class taggable. The names of the instance variable and the setup method are prefixed with "taggable_" to reduce the risk of namespace collision. You must call taggable_setup before you can use any of this module's methods. |
|
module Taggable attr_accessor :tags def taggable_setup @tags = Set.new end def add_tag(tag) @tags << tag end def remove_tag(tag) @tags.delete(tag) end end module Taggable2 def initialize(a,b,c) end end class TaggableString < String include Taggable def initialize(*args) super taggable_setup end end s = TaggableString.new('It was the best of times, it was the worst of times.') s.add_tag 'dickens' s.add_tag 'quotation' s.tags |
#<Set: {"dickens", "quotation"}> | #<Set: {"dickens", "quotation"}> |
module Complaint def gripe voice('In all my years I have never encountered such behavior...') end def faint_praise voice('I am pleased to notice some improvement, however slight...') end def voice(complaint_text) raise NotImplementedError, "#{self.class} included the Complaint module but didn't define voice!" end end class MyComplaint include Complaint end MyComplaint.new.gripe |
NotImplementedError: MyComplaint included the Complaint module but didn't define voice! |
Error! (Exception?) Here's stdout: NotImplementedError: MyComplaint included the Complaint module but didn't define voice! from (irb):37:in `voice' from (irb):31:in `gripe' from (irb):44 |
module Ayto def potato 'Pohtayto' end end module Ahto def potato 'Pohtahto' end end class Potato include Ayto include Ahto end Potato.new.potato |
"Pohtahto" | "Pohtahto" |