2016-04-25 36 views
0

究竟是什麼這的Ruby on Rails的語法含義 - >()`用Ruby語法on Rails的

options = ->(p) {{controller: 'clients', subdomain: "m.#{Rails.env}"}.merge!(p)}

我以前從來沒有遇到過這樣的語法含義:->(p)

我甚至無法找到谷歌上的資源。有沒有人有關於該教程?

+0

如果您想更深入地鑽研Ruby的lambda表達式,我對他們的會議演示文稿發佈在YouTube上的https://www.youtube.com/watch?v=hyRgf6Qc5pw;幻燈片放映在https://speakerdeck.com/keithrbennett/ruby-lambdas-functional-conf-bangalore-oct-2014。 –

+0

這個SO線程可能對你有意思:http://stackoverflow.com/a/28215281/3033649 – markets

+0

你有一個選擇調用'options'的大雜燴:'options.call(p)','options [p] ''''options.yield(p)'''options === p'和仍然支持但是不出路的''options。(p)'。 –

回答

5

這只是額外的lambda語法(自Ruby 1.9以來)。舊的語法:

options = lambda { |p| { controller: 'clients', subdomain: "m.#{Rails.env}"}.merge!(p)} 
+0

現在稱爲「stabby lambda」。 – tadman

+0

「新」是相對的。我個人記得它在2007年已經存在,可能比這更早。 –

+0

@JörgWMittag,你說得對,Ruby 1.9在2007年發佈,但以前的版本沒有這個語法。 – Ilya