¿Cuál es la diferencia entre @title
y title
? Dado que ambos pueden ser nombres de variables. Además, ¿cómo decido qué tipo de variable debo usar? Con @
o no?
ruby-on-rails
ruby
variables
OneZero
fuente
fuente
Respuestas:
title
es una variable local Solo existen dentro de su alcance (bloque actual)@title
es una variable de instancia y está disponible para todos los métodos dentro de la clase.Puede leer más aquí: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
En Ruby on Rails: declarar sus variables en su controlador como variables de instancia (
@title
) las pone a su disposición.fuente
Úselo
@title
en sus controladores cuando desee que su variable esté disponible en sus vistas.La explicación es que
@title
es una variable de instancia ytitle
es una variable local y rails hace que las variables de instancia de los controladores estén disponibles para las vistas. Esto sucede porque el código de plantilla (erb, haml, etc.) se ejecuta dentro del alcance de la instancia del controlador actual.fuente
La diferencia está en el alcance de la variable. @Version está disponible para todos los métodos de la instancia de clase.
La respuesta corta, si está en el controlador y necesita hacer que la variable esté disponible para la vista, utilice
@variable
.Para obtener una respuesta mucho más larga, intente esto: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
fuente
@variable
s se llaman variables de instancia en ruby. Lo que significa que puede acceder a estas variables en CUALQUIER MÉTODO dentro de la clase. [En todos los métodos de la clase]Las variables sin el
@
símbolo se llaman variables locales, lo que significa que puede acceder a estas variables locales solo dentro de ESE MÉTODO DECLARADO. Limitado al alcance local.Ejemplo de variables de instancia:
En el ejemplo anterior
@cust_id
,@cust_name
,@cust_addr
se accede en otro método dentro de la clase. Pero lo mismo no sería accesible con variables locales.fuente
Un tutorial sobre ¿Qué es el alcance variable? presenta algunos detalles bastante bien, solo adjunte lo relacionado aquí.
fuente
Solo se puede acceder a una variable local desde el bloque de su inicialización. También una variable local comienza con una letra minúscula (az) o un guión bajo (_).
Y la variable de instancia es una instancia de
self
y comienza con una@
También una variable de instancia pertenece al objeto mismo. Las variables de instancia son aquellas en las que realiza métodos, es decir,.send
etc.ejemplo:
El
@user
es la variable de instanciaY las variables de instancia no inicializadas tienen un valor de
Nil
fuente
@title
&title
?@title
otitle
@ variables son variables de instancia, sin son variables locales.
Lea más en http://ruby.about.com/od/variables/a/Instance-Variables.htm
fuente