103 lines
2.0 KiB
Markdown
103 lines
2.0 KiB
Markdown
Obsolete
|
|
========
|
|
|
|
Use `#lazy`.
|
|
|
|
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
|
|
|
|
Thanks to `Symbol#to_proc`:
|
|
|
|
Sequence.new.to_fun.
|
|
select( &:even?).
|
|
collect {|i| i/3 }.
|
|
select( &:even?).
|
|
collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
|
|
flatten. # It flattens everything! Not like: collect {|i| i.flatten }.
|
|
p
|
|
|
|
If you know methodphitamine, combine it:
|
|
|
|
require 'methodphitamine'
|
|
|
|
Sequence.new.to_fun.
|
|
select( &it.even?).
|
|
collect( &it/3).
|
|
select( &it.even?).
|
|
collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }.
|
|
flatten.
|
|
p
|
|
|
|
(0..100000).to_fun.
|
|
collect( &it*3).
|
|
select( &it%5 == 2).
|
|
to_a
|
|
|
|
Makros
|
|
======
|
|
|
|
seq = Sequence.new.to_fun
|
|
seq = seq.select &it.even? if must_be_even
|
|
seq = seq.
|
|
collect( &it/3).
|
|
select( &it.even?).
|
|
collect {|i| [[[[[[i.even?, i.odd?]]], i, [[[[[[i.class]]]]]]]]] }
|
|
seq = seq.flatten if please_flatten
|
|
if print_it
|
|
seq.p
|
|
else
|
|
seq_to_a
|
|
end
|
|
|
|
What's with _#map_?
|
|
=================
|
|
|
|
Do you know MapReduce? In future #map will be used for MapReduce. Use #collect.
|