rubylanguage-agnosticmixinstraits

What are some good examples of Mixins and or Traits?


I was reading up on Ruby, and learned about its mixins pattern, but couldn't think of many useful mixin functionality (because I'm not used to thinking that way most likely). So I was wondering what would be good examples of useful Mixin functionality?

Thanks

Edit: A bit of background. I'm Coming from C++, and other Object languages, but my doubt here is that Ruby says it's not inheriting mixins, but I keep seeing mixins as Multiple inheritance, so I fear I'm trying to categorize them too soon into my comfort zone, and not really grok what a mixin is.


Solution

  • Well the usual example I think is Persistence

    module Persistence
        def load sFileName
            puts "load code to read #{sFileName} contents into my_data"
        end
    
        def save sFileName
            puts "Uber code to persist #{@my_data} to #{sFileName}"
        end
    
    end
    
    class BrandNewClass
        include Persistence
        attr :my_data
        
        def data=(someData)
            @my_data = someData
        end
    end
    
    b = BrandNewClass.new
    b.data = "My pwd"
    b.save "MyFile.secret"
    b.load "MyFile.secret"
    

    Imagine the module is written by a Ruby ninja, which persists the state of your class to a file.
    Now suppose I write a brand new class, I can reuse the functionality of persistence by mixing it in by saying include ModuleILike. You can even include modules at runtime. I get load and save methods for free by just mixing it in. These methods are just like the ones that you wrote yourself for your class. Code/Behavior/Functionality-reuse without inheritance!

    So what you're doing is including methods to the method table for your class (not literally correct but close).