2013-05-19 56 views
13

Ruby有lambda語法,這樣我就可以使用->符號:如何使用Ruby的新lambda語法?

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

我錯過了什麼嗎?

+0

請給出完整的錯誤堆棧。 –

+0

^^^沒有「堆棧」,它是一個語法錯誤。但是,添加了一行以顯示語法錯誤。 – CuriousMind

回答

20

我認爲,新的語法應爲

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

我覺得語法應該是這樣的。

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

10秒後:) – lis2

1

看來你是混合->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]) 

個人而言,我會用 '拉姆達' 的語法,因爲它是更rubyish。