2013-07-15 20 views
7

prostu biegł następującej linii kodu w aplikacji Rails:Jaki jest -> (myślnik większe niż) operator w Ruby/Rails

scope :for_uid, ->(external_id) { where(external_id: external_id) } 

Co operator -> oznacza? To trochę trudne dla Google.

+8

Nazywa się "pałąkowata lambda". Po prostu dla FYI. –

+0

@fotanus - Dzięki, po prostu nie wiedziałem, czego szukać i większość wyszukiwarek ignoruje -> w wyszukiwanych terminach. –

+1

Zawsze jest [symbolhound.com] (http://symbolhound.com/?q=ruby+-%3E), ale w tym przypadku nie jest to zbyt użyteczne. –

Odpowiedz

15

To jest cukier syntaktyczny.

->(external_id) { where(external_id: external_id) } 

jest równa:

lambda { |external_id| where(external_id: external_id) } 
+0

Dzięki, wiedziałem, że wygląda znajomo. Po prostu nie wiedziałem, czego szukać, aby go znaleźć. –

+0

Ah! Czy ukradli to z CoffeeScript? – Chloe

6

To new lambda notation. Ta składnia została wprowadzona w Rubim 1.9 i służy do definiowania nienazwanych funkcji.

W twoim przykładzie jest to zakres zdefiniowany przez funkcję bez nazwy.

5

Operator -> został wprowadzony w Rubim 1.9 jako skrócona składnia dla starej funkcji lambda. Zachowuje się prawie identycznie jak funkcja lambda, ale pozwala określić parametry poza blokiem:

lambda {|param| puts param } 

# becomes 

-> (param) { puts params } 
Powiązane problemy