fork download
  1. # price.rb
  2.  
  3. class Price
  4. def initialize(val = 0); @val = val end
  5. attr_accessor :val
  6. end
  7.  
  8.  
  9. # decorate_price.rb
  10.  
  11. module Decoratable
  12. def decos; @decos ||= [] end
  13. def val; decos.inject(@val){ | acc, deco | deco[acc] } end
  14. end
  15.  
  16. class Price; prepend Decoratable end
  17. $Double = ->x{x*2}
  18. $Wholesales = ->x,adv{x+adv}.curry
  19.  
  20.  
  21. # decorate_price_test.rb
  22.  
  23. price = Price.new(120)
  24. price.decos << $Double << $Wholesales[80] << $Double << $Wholesales[200]
  25. p price.val
Success #stdin #stdout 0.05s 9608KB
stdin
Standard input is empty
stdout
840