blocks, procs && lambdas

9
Blocks, procs && lambdas #16 ruby workshop, 2013-03-24 Vidmantas Kabošis

Upload: vidmantas-kabosis

Post on 13-Jul-2015

112 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Blocks, procs && lambdas

Blocks, procs && lambdas#16 ruby workshop, 2013-03-24 Vidmantas Kabošis

Page 2: Blocks, procs && lambdas

Closure (CS)● function or reference to a function together

with a referencing environment ● closure <..> allows a function to access

those non-local variables even when invoked outside of its immediate lexical scope [1]

1 - http://en.wikipedia.org/wiki/Closure_%28computer_science%29

Page 3: Blocks, procs && lambdas

Closures in Ruby1. Block2. Proc3. proc4. lambda

Page 4: Blocks, procs && lambdas

Blocks● NOT an object (mind=blown)● Implicit pass/call● Explicit pass/call*● Speed! Explicit invoke is considerably slower

(~50%)*● Implicit block within implicit block?● Implicit block behaves like Proc*

Page 5: Blocks, procs && lambdas

Proc● Pretty usual method object● Call● Pass any number of argument(s)● respond_to(:arity)● Flow control keywords (return, break, redo,

retry, ...)

Page 6: Blocks, procs && lambdas

proc● Ruby 1.8: proc == lambda● Ruby 1.9 and up: proc == Proc

○ lambda?

Page 7: Blocks, procs && lambdas

lambda● Count of arguments● return == break (proc)● ->

Page 8: Blocks, procs && lambdas

end● Implicit blocks are not objects, but can

become an object when referenced (explicitly)

● Proc.new == proc, don't care about args too much & returns

● lambda counts args & diminutive returns

Page 9: Blocks, procs && lambdas

end!