OK.
La diferencia entre los operadores =
y =>
es que la primera es la asignación, la segunda representa una asociación en un hash (matriz asociativa). Por lo tanto, { :key => 'val' }
dice "crear una matriz asociativa, con :key
siendo la clave y 'val'
siendo el valor". Si quieres sonar como un Rubyist, llamamos a esto "hashrocket". (Créalo o no, este no es el operador más extraño en Ruby, también tenemos el <=>
, o "operador de nave espacial").
Puede estar confundido porque hay un atajo corto que puede usar en métodos, si el último parámetro es un hash, puede omitir los corchetes ondulados ({}
). así que llamar al render :partial => 'foo'
es básicamente llamar al método de renderizado, pasando un hash con un par clave/valor único. Debido a esto, a menudo se ve un hash como el último parámetro para tener los parámetros opcionales de un pobre (también se ve algo similar en JavaScript).
En Ruby, cualquier palabra normal es una variable local. Entonces foo
dentro de un método es una variable con alcance al nivel del método. Prefijar una variable con @
significa abarcar la variable a la instancia. Entonces, @foo
en un método es un nivel de instancia.
@@
significa una variable de clase, lo que significa que las variables @@
están dentro del alcance de la clase y de todas las instancias.
:
significa símbolo. Un símbolo en Ruby es un tipo especial de cadena que implica que se usará como clave. Si proviene de C#/Java, son similares en el uso a la parte clave de una enumeración. También existen algunas otras diferencias, pero básicamente cada vez que va a tratar una cadena como cualquier tipo de clave, en su lugar usa un símbolo.
los ejemplos 3 y 4 me resultan confusos, no puedo ver la diferencia en el ejemplo 3 y 4. –
@Simon Ejecute el ejemplo # 4 con @x en lugar de @@ x y verá la diferencia –