2012-05-18 11 views

risposta

34

I due punti in questo contesto indicano un hash letterale.

factory è la chiave Hash, :user è il valore.

La sintassi alternativa è :factory => :user. Intendono la stessa cosa.

+10

Si noti che la sintassi non-hashrocket è stata aggiunta in Ruby 1.9 e non esiste nelle versioni precedenti. –

+0

Quindi, in questo contesto, ':' è '=>'? – Roman

+0

Sì, è solo un nuovo modo di scrivere Hash introdotto in Ruby 1.9, probabilmente perché è leggermente più conciso della sintassi =>. – OzBandit

16

Ruby 1.8 sintassi:

:factory => :user 

Ruby 1.9 sintassi:

factory: :user 

Si noti che la sintassi Ruby 1.8 lavora a 1.9 anche.

+2

Qual è stata la logica alla base dell'aggiunta di questa nuova sintassi? Penso che legga peggio dei razzi/frecce, che sono comunemente intesi per rappresentare mappature. – Matthias

+2

Sono incerto sul motivo per cui è stato modificato. Ho cercato su Google e non riesco a trovare alcuna discussione ovvia su di esso. Se trovi qualche pls in background post, sono interessato. Thanks1 –

+0

Questa modifica può avere qualcosa a che fare con il modo in cui Javascript e forse altri linguaggi gestiscono la notazione letterale dell'oggetto. Per esempio, in JavaScript, che possiamo fare: 'persona var = { nome: "John", età: 42 anni, sposato : true} ' così realmente, quando stiamo passando 'fabbrica: : user', quello che stiamo facendo è passare '{factory:: user}', scritto anche come '{: factory =>: user}'. La sintassi 1.9 ha lo scopo di rendere più facile fare qualcosa come '{factory:" user "}' –

0

Le altre risposte sono corrette. C'era qualche speculazione riguardo la logica alla base di questa nuova sintassi. Questo cambiamento può avere qualcosa a che fare con il modo in cui Javascript e forse altri linguaggi gestiscono la notazione letterale dell'oggetto. Forse è stato sentito il bisogno di portare il rubino più in linea con il modo in cui questi linguaggi gestiscono la creazione di oggetti.

Per esempio, in JavaScript, che possiamo fare:

var person = { 
    name: "John", 
    age: 42, 
    married: false 
} 

Quindi, in realtà, quando stiamo passando factory: :user, quello che stiamo facendo veramente sta passando {factory: :user}, scritto anche come {:factory => :user}. La sintassi 1.9 ha lo scopo di rendere più facile fare qualcosa come {factory: "user"}

+0

Penso che questo sia un modo molto migliore per specificare un hash (potrei essere di parte visto che proviene dai dit di pitone). Anche dal punto di vista di POLA e programmatore-felicità che Ruby e RoR appoggiano con tanto entusiasmo, secondo me l'incisione pesante della battitura a macchina è stata una piaga. Bene, ora abbiamo la possibilità di usare la notazione dei due punti. – Shreyas

Problemi correlati