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" |