2013-07-15 6 views
7

Ho appena eseguito attraverso la seguente riga di codice in un'applicazione Rails:Qual è il -> (trattino maggiore di) Operatore in Ruby/Rails

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

Che cosa significa l'operatore ->? È un po 'difficile per Google.

+8

Si chiama "stabby lambda". Solo FYI. –

+0

@fotanus - Grazie, non sapevo cosa cercare e la maggior parte dei motori di ricerca ignora il -> nei termini di ricerca. –

+1

C'è sempre [symbolhound.com] (http://symbolhound.com/?q=ruby+-%3E) ma non è molto utile in questo caso. –

risposta

15

Questo è zucchero sintattico.

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

è pari a:

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

Grazie, sapevo che sembrava familiare. Non sapevo cosa cercare per trovarlo. –

+0

Ah! Lo hanno rubato da CoffeeScript? – Chloe

6

E 'new lambda notation. Questa sintassi è stata introdotta in Ruby 1.9 e viene utilizzata per definire funzioni senza nome.

Nell'esempio è un ambito definito dalla funzione senza nome.

5

L'operatore -> è stato introdotto in Ruby 1.9 come sintassi abbreviata per la vecchia funzione lambda. Si comporta in modo quasi identico alla funzione lambda ma consente di specificare i parametri all'esterno del blocco:

lambda {|param| puts param } 

# becomes 

-> (param) { puts params } 
Problemi correlati