01
από 02
Δοκιμασία και μέθοδος αρχικοποίησης

Όταν ορίζετε μια κλάση σε Ruby, ο Ruby θα εκχωρήσει ένα νέο αντικείμενο κατηγορίας στο όνομα σταθερής κλάσης. Για παράδειγμα, εάν ήσασταν να πείτε κατηγορίας άτομο? τέλος, αυτό είναι σχεδόν ισοδύναμο με Πρόσωπο = Class.new. Αυτό το αντικείμενο κλάσης είναι του τύπου Τάξη, και κατέχει μια σειρά από μεθόδους που είναι χρήσιμες για την πραγματοποίηση παρουσιών αντιγράφων αυτών των περιπτώσεων.
02
από 02
Κάνοντας στιγμιότυπα
Για να δημιουργήσετε μια νέα εμφάνιση μιας κλάσης, καλέστε εκείνη την κλάση νέος μέθοδος. Από προεπιλογή, αυτό θα κατανείμει την απαιτούμενη μνήμη για την κλάση και θα επιστρέψει μια αναφορά στο νέο αντικείμενο. Έτσι, εάν κάνατε μια νέα εμφάνιση του Πρόσωπο τάξη, θα καλέσετε Person.new.
Ενώ στην αρχή αυτό φαίνεται λίγο πίσω, δεν υπάρχει νέος λέξη-κλειδί σε Ruby ή οποιαδήποτε ειδική σύνταξη. Τα νέα αντικείμενα δημιουργούνται μέσω μιας κανονικής μεθόδου που, όλα λέγονται και γίνονται, κάνουν σχετικά απλά πράγματα.
Αρχικοποίηση στιγμιότυπων
Ένα κενό αντικείμενο δεν είναι πολύ συναρπαστικό. Για να αρχίσετε να χρησιμοποιείτε το αντικείμενο σας, πρέπει πρώτα να αρχικοποιηθεί (αν υποτεθεί ότι έχει οποιοδήποτε instance μεταβλητές που χρειάζεται αρχικοποίηση). Αυτό γίνεται μέσω του αρχικοποιήστε μέθοδος. Ο Ruby θα περάσει οποιαδήποτε επιχειρήματα θα περάσετε SomeClass.new επάνω σε αρχικοποιήστε στο νέο αντικείμενο. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε κανονικές μεταβλητές αναθέσεις και μεθόδους για την αρχικοποίηση της κατάστασης του αντικειμένου. Σε αυτό το παράδειγμα, α Πρόσωπο παρουσιάζεται η τάξη του οποίου αρχικοποιήστε η μέθοδος θα πάρει ένα όρισμα ονόματος και ηλικίας και θα τα εκχωρήσει σε μεταβλητές στιγμιότυπων.
(όνομα, ηλικία) @name, @age = όνομα, end end end bob = Person.new ('Bob', 34)
Μπορείτε επίσης να χρησιμοποιήσετε αυτή την ευκαιρία για να αποκτήσετε τους πόρους που μπορεί να χρειαστείτε. Άνοιγμα δικτύου πρίζες, ανοίξτε αρχεία, διαβάστε τα δεδομένα που χρειάζεστε κ.λπ. Η μόνη προειδοποίηση είναι ότι οι άνθρωποι γενικά δεν περιμένουν αρχικοποιήστε μεθόδους αποτυχίας. Βεβαιωθείτε ότι έχετε καταγράψει τυχόν αποτυχία αρχικοποιήστε μεθόδων.
Καταστρέφοντας αντικείμενα
Γενικά, δεν καταστρέφετε αντικείμενα στο Ruby. Αν έρχεστε από τη γλώσσα C ++ ή από άλλη γλώσσα χωρίς συλλέκτη σκουπιδιών, αυτό μπορεί να φαίνεται περίεργο. Αλλά στο Ruby (και στις περισσότερες άλλες συλλογές σκουπιδιών), δεν καταστρέφετε αντικείμενα, απλά σταματάτε να το αναφέρετε. Στον επόμενο κύκλο συλλογής σκουπιδιών, οποιοδήποτε αντικείμενο που δεν αναφέρεται σε αυτό θα καταστραφεί αυτόματα. Υπάρχουν κάποια σφάλματα με κυκλικές αναφορές, αλλά γενικά αυτό λειτουργεί άψογα και δεν χρειάζεστε καν έναν "καταστροφικό παράγοντα".
Αν αναρωτιέστε πόρους, μην ανησυχείτε. Όταν το αντικείμενο που κατέχει τον πόρο καταστρέφεται, ο πόρος θα απελευθερωθεί. Τα ανοιχτά αρχεία και οι συνδέσεις δικτύου θα κλείσουν, η μνήμη θα απενεργοποιηθεί. Μόνο αν διαθέτετε πόρους σε μια επέκταση C θα πρέπει πραγματικά να ανησυχείτε για την ανακατανομή των πόρων. Παρόλο που δεν υπάρχει εγγύηση όταν θα λειτουργεί ο συλλέκτης απορριμμάτων. Προκειμένου να απομεταλλωθούν οι πόροι σε ένα έγκαιρος τρόπο, προσπαθήστε να τα απελευθερώσετε με το χέρι.
Δημιουργία αντιγράφων αντικειμένων
Το Ruby περνάει με παραπομπή. Εάν μεταβιβάσετε μια αναφορά σε ένα αντικείμενο σε a μέθοδος, και αυτή η μέθοδος καλεί μια μέθοδο που τροποποιεί την κατάσταση αυτού του αντικειμένου, μπορεί να προκύψουν απρόβλεπτες συνέπειες. Επιπλέον, οι μέθοδοι μπορούν στη συνέχεια να αποθηκεύσουν την αναφορά στο αντικείμενο που πρόκειται να τροποποιηθεί πολύ αργότερα, προκαλώντας καθυστέρηση για το σφάλμα. Για να αποφευχθεί αυτό, ο Ruby παρέχει μερικές μεθόδους για την αναπαραγωγή αντικειμένων.
Για να αντιγράψετε οποιοδήποτε αντικείμενο, απλά καλέστε το some_object.dup μέθοδος. Θα διατεθεί ένα νέο αντικείμενο και όλες οι μεταβλητές στιγμιότυπων του αντικειμένου θα αντιγραφούν. Ωστόσο, η αντιγραφή μεταβλητών στιγμιότυπων είναι αυτό που έπρεπε να αποφευχθεί: αυτό είναι το λεγόμενο "ρηχό αντίγραφο". Αν θα έπρεπε να κρατήσετε ένα αρχείο σε μια μεταβλητή instance, και τα δύο αντικείμενα θα αναφερόταν στο ίδιο αρχείο.
Απλά να γνωρίζετε ότι τα αντίγραφα είναι ρηχά αντίγραφα πριν χρησιμοποιήσετε το dup μέθοδος. Δείτε το άρθρο Κάνοντας Deep Copies σε Ruby Για περισσότερες πληροφορίες.