Istantanea e metodo di inizializzazione

01

di 02

Istantanea e metodo di inizializzazione

Imparare Ruby on Rails: giocare con irb
brnzwngs / Flikr / CC BY 2.0

Quando si definisce una classe in Ruby, Ruby assegnerà un nuovo oggetto classe a costante del nome della classe. Ad esempio, se dovessi dirlo persona di classe; fine, questo è approssimativamente equivalente a Persona = Class.new. Questo oggetto classe è del tipo Classee contiene numerosi metodi utili per creare istanze di copie di tali istanze.

02

di 02

Fare istanze

Per creare una nuova istanza di una classe, chiama quella classe nuovo metodo. Per impostazione predefinita, questo alloca la memoria richiesta per la classe e restituisce un riferimento al nuovo oggetto. Quindi, se dovessi creare una nuova istanza di Persona classe, chiameresti Person.new.

Mentre all'inizio questo sembra un po 'arretrato, non c'è nuovo parola chiave in Ruby o qualsiasi sintassi speciale. Nuovi oggetti vengono creati attraverso un metodo normale che, tutto sommato, fa cose relativamente semplici.

Inizializzazione di istanze

Un oggetto vuoto non è molto eccitante. Per iniziare a utilizzare l'oggetto, è necessario prima inizializzarlo (supponendo che ne abbia uno

instagram viewer
variabili di istanza che deve essere inizializzato). Questo viene fatto tramite il inizializzare metodo. Ruby passerà qualsiasi argomento tu passi SomeClass.new a inizializzare sul nuovo oggetto. È quindi possibile utilizzare le assegnazioni e i metodi delle variabili normali per inizializzare lo stato dell'oggetto. In questo esempio, a Persona viene presentata la classe di chi inizializzare Il metodo prenderà un argomento name e age e li assegnerà alle variabili di istanza.

class Person def inizializza (nome, età) @name, @age = name, end end end bob = Person.new ('Bob', 34)

Puoi anche sfruttare questa opportunità per acquisire tutte le risorse di cui potresti aver bisogno. Rete aperta prese, aprire i file, leggere tutti i dati necessari, ecc. L'unica avvertenza è che le persone generalmente non si aspettano inizializzare metodi per fallire. Assicurati di documentare eventuali errori inizializzare metodi accuratamente.

Destorying Objects

In generale, non distruggi oggetti in Ruby. Se provieni da C ++ o da un'altra lingua senza un Garbage Collector, questo potrebbe sembrare strano. Ma in Ruby (e nella maggior parte delle altre lingue raccolte nella spazzatura), non distruggi oggetti, semplicemente smetti di riferirti ad esso. Nel successivo ciclo di garbage collection, qualsiasi oggetto senza alcun riferimento ad esso verrà distrutto automaticamente. Ci sono alcuni bug con riferimenti circolari, ma in generale funziona perfettamente e non hai nemmeno bisogno di un "distruttore".

Se ti stai chiedendo delle risorse, non preoccuparti. Quando l'oggetto che contiene la risorsa viene distrutto, la risorsa verrà liberata. I file aperti e le connessioni di rete verranno chiusi, la memoria verrà allocata, ecc. Solo se si allocano risorse in un'estensione C, sarà davvero necessario preoccuparsi di deallocare le risorse. Sebbene non vi sia alcuna garanzia quando verrà eseguito il Garbage Collector. Al fine di deallocare le risorse in a tempestivo modo, prova a liberarli manualmente.

Fare copie di oggetti

Ruby è passato per riferimento. Se si passa un riferimento a un oggetto a metodoe quel metodo chiama un metodo che modifica lo stato di quell'oggetto, possono verificarsi conseguenze indesiderate. Inoltre, i metodi possono quindi salvare il riferimento all'oggetto da modificare in un momento molto successivo, causando un effetto ritardato per il bug. Per evitare ciò, Ruby fornisce alcuni metodi per duplicare gli oggetti.

Per duplicare qualsiasi oggetto, chiama semplicemente il some_object.dup metodo. Un nuovo oggetto verrà allocato e tutte le variabili di istanza dell'oggetto verranno copiate. Tuttavia, la copia delle variabili di istanza è ciò che si doveva evitare: questo è ciò che viene chiamato "copia superficiale". Se dovevi conservare un file in una variabile di istanza, entrambi gli oggetti duplicati si riferiranno ora allo stesso file.

Basta essere consapevoli del fatto che le copie sono copie superficiali prima di utilizzare il dup metodo. Vedi l'articolo Fare copie profonde in Ruby per maggiori informazioni.

instagram story viewer