Skip to content
Convert your Procs to Lambdas
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
test
.gitignore
.travis.yml
Gemfile
README.md
Rakefile
proc_to_lambda.gemspec

README.md

Proc To Lambda

Build Status

Convert your procs to lambdas for all the Rubies.

Why?

I love anonomyous functions ( lambdas & procs <3 ). I also love "confident" style ruby functions that have early returns:

def foo(num)
  return false if num.nil?
  # ...

Unfortunately procs do not play nice with early returns:

def bar(num, &block)
  block.call(num)
end

bar(nil) do |num|
  return false if num.nil?
  # ...
end
LocalJumpError: unexpected return
  from (irb):25:in `block in irb_binding'
  from (irb):21:in `call'
  from (irb):21:in `bar'
  from (irb):24
  from /Users/schneems/.rbenv/versions/2.0.0-p247/bin/irb:12:in `<main>'

But lambdas do:

bar(nil, &lambda {|num|
  return false if num.nil?
  # ...
})
# => false

What I want is the pretty syntax of using a proc, but with the flexibility of explicit returns of a lambda. Enter: ProcToLambda

Can't you do this in Ruby already?

Yes, but the implementation is not standard across all the rubies :(

Install

In your Gemfile:

gem 'proc_to_lambda'

Use

In your code, call ProcToLambda.to_lambda() and pass in a block:

def bar(num, &block)
  block = ProcToLambda.to_lambda(block)
  block.call(num)
end

If you're risky you can extend the Proc class directly:

Proc.extend(ProcToLambda)

Then you can call Proc#to_lambda:

def bar(num, &block)
  block.to_lambda.call(num)
end

License

MIT

You can’t perform that action at this time.