2012-05-02 9 views
17

Sto lottando per capire la differenza tra: simbolo e testo: per quanto riguarda il posizionamento del colon. La mia comprensione è che quando usiamo: simbolo ci riferiamo a questo oggetto e qualunque cosa contenga, dove come testo: è usato per assegnare un valore al testo come se fosse una variabile. È corretto o qualcuno potrebbe approfondire l'utilizzo. Grazie.Qual è la differenza tra il posizionamento del colon in: qualcosa e qualcosa di simile:

+1

Simbolo: il valore viene visualizzato solo nell'espressione hash come un modo per ridurre, ma non ho trovato molte persone lo favoriscono. – texasbruce

risposta

18

:whatever è un simbolo, hai capito bene.

Quando si utilizza un hash, questo era come si è utilizzato per definire in 1.8x ruby:

{:key => value, :another_key => another_value} 

questo è noto come la sintassi hashrocket. In ruby ​​1.9x, questo è cambiato a:

{key: value, another_key: another_value} 

C'è compatibilità a ritroso che sarà ancora caricare la sintassi hashrocket ... Ma, a 1,9, 'chiave:' è un simbolo

+2

Grazie per questo molto apprezzato! – Tom

+2

La tua ultima affermazione causerà confusione..non credo che la chiave ":" sia un simbolo in ruby, ma quando questa sintassi entra nelle parentesi, ruby ​​lo identifica come un simbolo. Anche la sintassi hashrocket non è fornita solo per la compatibilità con le versioni precedenti. Infatti, se si desidera definire un hash con chiavi non simbolo, è necessario fare affidamento sulla sintassi del razzo hash. Direi che la nuova sintassi di stile json è più di uno zucchero sintattico. – rubyprince

17

il {:key => value} è la vecchia sintassi hash in ruby, ora abbiamo una nuova sintassi hash che è più simile a jSON così

{:key => value} 

è lo stesso di

{key: value} 

Quello vecchio, siamo tutti a conoscenza è:

old_hash = {:simon => "Talek", :lorem => "Ipsum"} 

Questo è tutto bello e dandy, ma potrebbe essere più semplice e più pulito. Controlla la 1.9 stile Ruby, è una sorta di assomiglia JSON:

new_hash = {simon: "Talek", lorem: "Ipsum"} 

Ma ora si guarda più da vicino e chiedere: “Ma in precedenza la chiave era un simbolo in modo esplicito, che cosa è con questo adesso?”.

Bene, hai ragione, la nuova notazione è una sorta di zucchero sintattico per lo stile più comune di hash, il cosiddetto simbolo di hash dell'oggetto. Se si esegue questa operazione nel IRB, vedrete rubino restituendo il vecchio hash scuola, con i simboli utilizzati come chiavi:

> new_hash = {simon: "Talek", lorem: "Ipsum"} 
=> {:simon=>"Talek", :lorem=>"Ipsum"} 

Se avete bisogno di avere oggetti arbitrari come le chiavi di hash, avrai ancora per farlo vecchia scuola.

ref: http://breakthebit.org/post/8453341914/ruby-1-9-and-the-new-hash-syntax

Problemi correlati