13

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?

the Tin Man
  • 155,156
  • 41
  • 207
  • 295
CuriousMind
  • 32,657
  • 26
  • 90
  • 129

3 Answers3

21

I think that new syntax should be

match "/", to:  ->(e) { [404, {}, ["Hello! I am micro rack app"]] }, via: [:get]
lis2
  • 4,126
  • 1
  • 16
  • 9
9

I think the syntax should be like this.

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

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.

Dorian
  • 20,859
  • 8
  • 116
  • 113