OK.
La differenza tra gli operatori =
e =>
è che il primo è l'assegnazione, il secondo rappresenta un'associazione in un hash (array associativo). Quindi { :key => 'val' }
sta dicendo "creare un array associativo, con :key
come chiave e 'val'
come valore". Se vuoi sembrare un Rubyist, lo chiamiamo "hashrocket". (Che ci crediate o meno, questo non è l'operatore più strano in Ruby, abbiamo anche il <=>
, o "operatore astronave".)
Potresti essere confuso perché c'è un po 'di scorciatoia che puoi usare in metodi, se l'ultimo parametro è un hash, puoi omettere le parentesi ondulate ({}
). quindi chiamare render :partial => 'foo'
fondamentalmente chiama il metodo render, passando un hash con una singola coppia chiave/valore. Per questo motivo, si vede spesso un hash come ultimo parametro per ordinare i parametri facoltativi di un uomo povero (si vede qualcosa di simile fatto anche in JavaScript).
In Ruby, qualsiasi parola normale è una variabile locale. Pertanto, foo
all'interno di un metodo è una variabile con ambito al livello del metodo. Il prefisso di una variabile con @
indica l'ambito della variabile sull'istanza. Quindi, @foo
in un metodo è un livello di istanza.
@@
significa una variabile di classe, ovvero le variabili @@
rientrano nell'ambito della classe e tutte le istanze.
:
significa simbolo. Un simbolo in Ruby è un tipo speciale di stringa che implica che verrà utilizzato come chiave. Se provieni da C#/Java, sono simili in uso alla parte fondamentale di un enum. Ci sono anche altre differenze, ma in pratica ogni volta che si tratta una stringa come qualsiasi tipo di chiave, si usa invece un simbolo.
fonte
2010-08-21 19:40:19
esempio 3 e 4 sono confusi per me, non riesco a vedere la differenza nell'esempio 3 e 4. –
@Simon Esegui l'esempio # 4 con @x anziché @@ x e vedrai la differenza –