From 438fc48b3de5f0e51c9324e47751e96168290047 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Mon, 19 Apr 2010 21:22:30 +0200 Subject: [PATCH] #map/#reduce will raise an error. Functional can be used like Enumerator. Version 0.0.1 --- README.md | 7 ++++++- VERSION | 2 +- lib/functional.rb | 19 +++++++++---------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 8017486..d625a86 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,9 @@ Usage require 'functional' obj = 0 .. 10**12 - Functional.new( obj).select {|i| i.even? }.map {|i| i/3 }.select {|i| i.even? }.each &method( :puts) + Functional.new( obj).select {|i| i.even? }.collect {|i| i/3 }.select {|i| i.even? }.each &method( :puts) + +What's with _#map_? +================= + +Do you know MapReduce? In future #map will be used for MapReduce. Use #collect. diff --git a/VERSION b/VERSION index 77d6f4c..8acdd82 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.0 +0.0.1 diff --git a/lib/functional.rb b/lib/functional.rb index 6828855..dce2126 100644 --- a/lib/functional.rb +++ b/lib/functional.rb @@ -21,12 +21,15 @@ class Functional push_method "value=%s(value)", &exe end -=begin # map/reduce? def map &exe - push_method "value=%s(value)", &exe + raise "Reserved for MapReduce." + end + + # map/reduce? + def reduce &exe + raise "Reserved for MapReduce." end -=end def select &exe push_method "%s(value)||next", &exe @@ -36,12 +39,8 @@ class Functional push_method "%s(value)&&next", &exe end - def each obj, &exe - return Enumerator.new self, :each, obj unless exe - obj.each &eval( "lambda{|value|#{@stack.join( ";")};exe.call(value)}") - end - - def inject obj, start, &exe - each( obj).inject start, &exe + def each &exe + return self unless exe + @obj.send @func || :each, *@args, &eval( "lambda{|value|#{@stack.join( ";")};exe.call(value)}") end end