How do I use Ruby's new lambda syntax?

2019-04-20 00:37发布

问题:

Ruby has lambda syntax, so I can use the -> symbol:

a = 0
new  -> { a < 5 }  do
   puts a
   a += 1
end

This works very well, but when I try to do this:

match "/", to:  -> { |e| [404, {}, ["Hello! I am micro rack app"]] }, via: [:get]
match( "/", to:  -> { |e| [404, {}, ["Hello! I am micro rack app"]] }, via: [:get] )
match( "/", { to:  -> { |e| [404, {}, ["Hello! I am micro rack app"]] }, via: [:get] })

all of the return the same syntax error:

$ ruby -c -e 'match( "/", to:  -> { |e| [404, {}, ["Hello! I am micro rack app"]] }, via: [:get] )'
-e:1: syntax error, unexpected '|'
match( "/", to:  -> { |e| [404, {}, ["Hello! I am mi...

Am I missing something?

回答1:

I think that new syntax should be

match "/", to:  ->(e) { [404, {}, ["Hello! I am micro rack app"]] }, via: [:get]


回答2:

I think the syntax should be like this.

->(e) { [404, {}, ["Hello! I am micro rack app"]]


回答3:

It seems you are mixing -> and lambda syntax

match( "/", to:  lambda { |e| [404, {}, ["Hello! I am micro rack app"]] }, via: [:get] )

And

match( "/", to:  -> (e) { [404, {}, ["Hello! I am micro rack app"]] }, via: [:get] )

Personally I would use the 'lambda' syntax as it is more rubyish.



标签: ruby lambda