Sha256: c3edc5781a4ab87afa5ac8e808a732b9692a4d6d3c28de74f536d0068fedcddd
Contents?: true
Size: 1.34 KB
Versions: 5
Compression:
Stored size: 1.34 KB
Contents
begin require 'calibre/functor' rescue LoadError require 'facets/support/functor' end module Enumerable # Returns an elementwise Functor designed to make R-like # elementwise operations possible. # # [1,2].ew + 3 #=> [4,5] # [1,2].ew + [4,5] #=> [5,7] # [1,2].ew + [[4,5],3] #=> [[5,7],[4,5] # #-- # Special thanks to Martin DeMello for helping to develop this. #++ def elementwise Functor.new do |op,*args| a = args.collect do |arg| if arg.kind_of?(Enumerable) ln = ( arg.length > self.length ? self.length : arg.length ) self[0...ln].zip(arg[0...ln]).collect{ |a,b| a.send(op,b) } #self[0...ln].zip(arg[0...1n]).collect{ |a,b| b ? a.send(op,b) : nil } else self.collect{ |a| a.send(op,arg) } end end a.flatten! if args.length == 1 a end end alias_method :ew, :elementwise end # _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # =begin test require 'test/unit' class TCEnumerable < Test::Unit::TestCase def test_ew a = [1,2,3] b = [4,5] assert_equal( [4,5,6], a.ew + 3 ) assert_equal( [5,7], a.ew + b ) assert_equal( [[5,7],[3,4,5]], a.ew.+(b,2) ) assert_equal( [[5,7],[4,5,6]], a.ew.+(b,3) ) end end =end
Version data entries
5 entries across 5 versions & 1 rubygems