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
  • 158,662
  • 42
  • 215
  • 303
CuriousMind
  • 33,537
  • 28
  • 98
  • 137

3 Answers3

21

I think that new syntax should be

match "/", to:  ->(e) { [404, {}, ["Hello! I am micro rack app"]] }, via: [:get]
lis2
  • 4,234
  • 1
  • 17
  • 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
  • 22,759
  • 8
  • 120
  • 116
G. Allen Morris III
  • 1,012
  • 18
  • 30