select, collect, .... all these methods work like a breadth-first search. With functional, it will work like a depth-first search. It's not faster, but it needs lesser memory.
This repository has been archived on 2021-12-03. You can view files and clone it, but cannot push or open issues or pull requests.
Find a file
2011-02-13 16:53:58 +01:00
lib added: tap. delete_if -> filter (delete_if manipulates self, but Functional never, so filter is better). reduce |-> inject (it is like Array#inject) 2011-02-13 16:53:14 +01:00
AUTHORS ready for gem 2010-04-19 21:08:49 +02:00
LICENSE ready for gem 2010-04-19 21:08:49 +02:00
Rakefile ready for gem 2010-04-19 21:08:49 +02:00
README.md more example in README.md... 2 spaces replaced 2010-06-23 17:01:43 +02:00
VERSION VERSION=0.1.2 2011-02-13 16:53:58 +01:00

Install

gem install functional

Usage

require 'functional'

# To demonstrate Functional, we create a Class with a infinite loop:
class Sequence
	include Enumerable
	def initialize first = 0, step = 1
		@i, @step = first, step
	end
	def each
		# Our infinite loop:
		loop do
			yield @i
			@i += @step
		end
	end
end

Functional.new( Sequence.new).
	select {|i| i.even? }.
	collect {|i| i/3 }.
	select {|i| i.even?}.
	collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
	flatten. # It flattens everything! Not like: collect {|i| i.flatten }.
	p

# Without Functional... Bye bye.
Sequence.new.
	select {|i| i.even? }.
	collect {|i| i/3 }.
	select {|i| i.even?}.
	collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
	flatten. # It flattens everything! Not like: collect {|i| i.flatten }.
	p

It will never realize, that #p doesn't exists, because the first select runs endless. Functional#p prints everything to stdout.

(0..100000).to_fun.
	collect {|i| i*3 }.
	select {|i| i%5 == 2 }.
	to_a

What's with #map?

Do you know MapReduce? In future #map will be used for MapReduce. Use #collect.