2009-06-09 12 views
16

Sto lavorando a Head First Rails, e continuo a vedere =>. E 'negli itinerari:Ruby on Rails: cosa significa il simbolo =>?

map.connect '/marmots/new', controller=>'marmots', :action=>'new'

E' in parziali di rendering:

render :partial=>"new_marmot"

E 'in opzioni per i link:

<%= link_to 'Destroy', marmot, :confirm=>'Are you sure?', :method=>:delete %>

In sostanza, => sembra significare' uguale, 'ma se è così, perché non usare solo un uguale segno di s? È più come "inviare a?"

Come si pronuncia => e cosa si intende per significato? Posso cavarmela senza saperlo, ma mi dà fastidio.

+1

Vedere questa domanda 3 anni dopo mi fa ridere! Sono sicuro di aver visto gli hash di Ruby in precedenza, ma forse non avevo visto esempi al di fuori di Rails dove si omettono sia le parentesi di una chiamata di metodo che le parentesi attorno a un argomento di hash finale, quindi sembrava magico. –

risposta

8

La prima chiamata di funzione è una scorciatoia per

map.connect('/marmots/new', {:controller=>'marmots', :action=>'new'}) 

dove il {} sono un hash-letterale. Il secondo argomento del metodo connect della mappa degli oggetti è un oggetto di classe Hash con le due chiavi: controller e: action (entrambi sono letterali della classe Symbol) i cui valori corrispondenti sono le due stringhe 'marmots' e 'new'.

MODIFICA: Io lo chiamo "freccia" o "mappe in".

+0

È sicuro dire che ogni volta che vedo la freccia, in realtà sto creando un hash, anche se i {} sono omessi? –

+0

Sì per i parametri nelle chiamate di metodo, no in generale (se si rileva un'eccezione con il salvataggio, viene utilizzato anche l'operatore "=>"). –

18

Ho sentito comunemente definito "razzo di hash". È l'operatore di assegnamento utilizzato con gli hash in ruby. Quindi, se avete un hash e si desidera assegnare un valore a una chiave (tipicamente un letterale), utilizzare

{key1 => value1, key2 => value2} 

Rails, e altro codice Ruby, spesso passano hash come parametri ai metodi per ottenere lo stesso effetto di nome argomenti in altre lingue come Python.

object.method({:param1 => value1, :param2 => value2}) 

MODIFICA: Durante la lettura, utilizzo "ottiene" come verbo, ad es. param1 ottiene valore1, ecc.

+0

Mi piace il bit sugli argomenti con nome. grazie per la chiara risposta –