Qual è la differenza tra @title
e title
? Dal momento che entrambi possono essere nomi di variabili. Inoltre, come posso decidere quale tipo di variabile dovrei usare? Con @
o no?
Qual è la differenza tra @title
e title
? Dal momento che entrambi possono essere nomi di variabili. Inoltre, come posso decidere quale tipo di variabile dovrei usare? Con @
o no?
Risposte:
title
è una variabile locale. Esistono solo nel suo ambito (blocco corrente)
@title
è una variabile di istanza ed è disponibile per tutti i metodi all'interno della classe.
Puoi leggere di più qui: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
In Ruby on Rails: dichiarare le variabili nel controller come variabili di istanza ( @title
) le rende disponibili per la visualizzazione.
Utilizzare @title
nei controller quando si desidera che la variabile sia disponibile nelle visualizzazioni.
La spiegazione è che si @title
tratta di una variabile di istanza ed title
è una variabile locale e le rotaie rendono le variabili di istanza dai controller disponibili alle viste. Ciò accade perché il codice modello (erb, haml, ecc.) Viene eseguito nell'ambito dell'istanza del controller corrente.
La differenza è nell'ambito della variabile. @Version è disponibile per tutti i metodi dell'istanza di classe.
La risposta breve, se sei nel controller e devi rendere la variabile disponibile per la vista, usa @variable
.
Per una risposta molto più lunga prova questo: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s sono chiamati variabili di istanza in ruby. Ciò significa che puoi accedere a queste variabili in QUALSIASI METODO all'interno della classe. [Attraverso tutti i metodi della classe]
Le variabili senza il @
simbolo sono chiamate variabili locali, il che significa che è possibile accedere a tali variabili locali solo all'interno di QUESTO METODO DICHIARATO. Limitato all'ambito locale.
Esempio di variabili di istanza:
class Customer
def initialize(id, name, addr)
@cust_id = id
@cust_name = name
@cust_addr = addr
end
def display_details
puts "Customer id #{@cust_id}"
puts "Customer name #{@cust_name}"
puts "Customer address #{@cust_addr}"
end
end
Nell'esempio sopra @cust_id
, @cust_name
, @cust_addr
sono accessibili in un altro metodo all'interno della classe. Ma la stessa cosa non sarebbe accessibile con le variabili locali.
Un tutorial su Cos'è l'ambito variabile? presenta alcuni dettagli abbastanza bene, basta allegare i relativi qui.
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
Una variabile locale è accessibile solo all'interno del blocco della sua inizializzazione. Anche una variabile locale inizia con una lettera minuscola (az) o un trattino basso (_).
E la variabile di istanza è un'istanza di self
e inizia con una @
Anche una variabile di istanza appartiene all'oggetto stesso. Le variabili di istanza sono quelle su cui si eseguono i metodi, ad es. .send
Ecc
esempio:
@user = User.all
La @user
è la variabile di istanza
E le variabili di istanza non inizializzate hanno un valore di Nil
@title
& title
?
@title
otitle
Le variabili @ sono variabili di istanza, senza variabili locali.
Maggiori informazioni su http://ruby.about.com/od/variables/a/Instance-Variables.htm