Подтвердить что ты не робот

Как использовать новый синтаксис лямбда Ruby?

Ruby имеет синтаксис лямбда, поэтому я могу использовать символ ->:

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

Это работает очень хорошо, но когда я пытаюсь сделать это:

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] })

все возвращают ту же синтаксическую ошибку:

$ 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...

Я что-то пропустил?

4b9b3361

Ответ 1

Я думаю, что новый синтаксис должен быть

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

Ответ 2

Я думаю, что синтаксис должен быть таким.

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

Ответ 3

Кажется, вы смешиваете синтаксис -> и lambda

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

и

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

Лично я бы использовал синтаксис лямбда, поскольку он более рубиновый.