The differences between -> and this new syntax are

* Whether the parameters are in the block or not: ->(x) { ... } or {|x| ... }
* While ->(x) { ... } is lambda, {|x| ... } is proc.
  i.e. While ->(x) { ... } is strict for the number of parameters,
{|x| ... } doesn't.

## Known issues

That patch doesn't support Ripper yet. See the following wrong results:

    irb(main):001:0> require 'ripper'
    => true
    irb(main):002:0> Ripper.sexp 'lambda { 1 }'
    => [:program, [[:method_add_block, [:method_add_arg, [:fcall,
[:@ident, "lambda", [1, 0]]], []], [:brace_block, nil, [[:@int, "1",
[1, 9]]]]]]]
    irb(main):003:0> Ripper.sexp '-> { 1 }'
    => [:program, [[:lambda, [:params, nil, nil, nil, nil, nil],
[[:@int, "1", [1, 5]]]]]]
    irb(main):004:0> Ripper.sexp '{ 1 }'
    => [:program, [[:hash, [:lambda, false, [[:@int, "1", [1, 2]]]]]]]
    irb(main):005:0> Ripper.sexp 'lambda {|x| 1 }'
    => [:program, [[:method_add_block, [:method_add_arg, [:fcall,
[:@ident, "lambda", [1, 0]]], []], [:brace_block, [:block_var,
[:params, [[:@ident, "x", [1, 9]]], nil, nil, nil, nil], nil],
[[:@int, "1", [1, 12]]]]]]]
    irb(main):006:0> Ripper.sexp '-> x { 1 }'
    => [:program, [[:lambda, [:params, [[:@ident, "x", [1, 3]]], nil,
nil, nil, nil], [[:@int, "1", [1, 7]]]]]]
    irb(main):007:0> Ripper.sexp '{|x| 1 }'
    => [:program, [[:hash, [:lambda, [:block_var, [:params, [[:@ident,
"x", [1, 2]]], nil, nil, nil, nil], nil], [[:@int, "1", [1, 5]]]]]]]

This problem will be fixed later.

--
ujihisa