Class: Functional

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/functional.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(obj = nil, func = nil, *args) ⇒ Functional

Returns a new instance of Functional.



16
17
18
# File 'lib/functional.rb', line 16

def initialize obj = nil, func = nil, *args
	@stack, @obj, @func, @args = [], obj, func, args
end

Class Method Details

.method_missing(meth, *args, &exe) ⇒ Object



5
6
7
# File 'lib/functional.rb', line 5

def self.method_missing meth, *args, &exe
	self.new.send meth, *args, &exe
end

Instance Method Details

#collect(&exe) ⇒ Object



20
21
22
# File 'lib/functional.rb', line 20

def collect &exe
	push_method "value=%s(value)", &exe
end

#delete_if(&exe) ⇒ Object



38
39
40
# File 'lib/functional.rb', line 38

def delete_if &exe
	push_method "%s(value)&&next", &exe
end

#each(&exe) ⇒ Object



42
43
44
45
# File 'lib/functional.rb', line 42

def each &exe
	return self  unless exe
	@obj.send @func || :each, *@args, &eval( "lambda{|value|#{@stack.join( ";")};exe.call(value)}")
end

#map(&exe) ⇒ Object

map/reduce?



25
26
27
# File 'lib/functional.rb', line 25

def map &exe
	raise "Reserved for MapReduce."
end

#push_method(code, *args, &exe) ⇒ Object



9
10
11
12
13
14
# File 'lib/functional.rb', line 9

def push_method code, *args, &exe
	name = "__meth_#{exe.object_id}"
	define_singleton_method name, &exe
	@stack.push [code % name]+args
	self
end

#reduce(&exe) ⇒ Object

map/reduce?



30
31
32
# File 'lib/functional.rb', line 30

def reduce &exe
	raise "Reserved for MapReduce."
end

#select(&exe) ⇒ Object



34
35
36
# File 'lib/functional.rb', line 34

def select &exe
	push_method "%s(value)||next", &exe
end