Qual è la differenza tra @titlee 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 @titlee 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 @titlenei controller quando si desidera che la variabile sia disponibile nelle visualizzazioni.
La spiegazione è che si @titletratta 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
@variables 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_addrsono 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 selfe 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. .sendEcc
esempio:
@user = User.all
La @userè la variabile di istanza
E le variabili di istanza non inizializzate hanno un valore di Nil
@title& title?
@titleotitle
Le variabili @ sono variabili di istanza, senza variabili locali.
Maggiori informazioni su http://ruby.about.com/od/variables/a/Instance-Variables.htm