Δυσκολεύομαι να κατανοήσω το attr_accessor
στη Ruby. Μπορεί κάποιος να μου το εξηγήσει;
attr_accessor είναι απλά μια μέθοδος. (Ο σύνδεσμος θα πρέπει να παρέχει περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί - κοιτάξτε τα ζεύγη μεθόδων που δημιουργούνται, και ένα σεμινάριο θα σας δείξει πώς να το χρησιμοποιήσετε).
Το κόλπο είναι ότι το class
δεν είναι ορισμός στη Ruby (είναι "απλά ένας ορισμός" σε γλώσσες όπως η C++ και η Java), αλλά είναι μια έκφραση που αξιολογείται. Κατά τη διάρκεια αυτής της αξιολόγησης καλείται η μέθοδος attr_accessor
, η οποία με τη σειρά της τροποποιεί την τρέχουσα κλάση - θυμηθείτε τον έμμεσο δέκτη: self.attr_accessor
, όπου self
είναι το "ανοιχτό" αντικείμενο της κλάσης σε αυτό το σημείο.
Η ανάγκη για το attr_accessor
και τους φίλους του, είναι, λοιπόν:
Η Ruby, όπως και η Smalltalk, δεν επιτρέπει την πρόσβαση σε μεταβλητές παραδείγματος εκτός των μεθόδων1 για το συγκεκριμένο αντικείμενο. Δηλαδή, οι μεταβλητές παραδείγματος δεν μπορούν να προσπελαστούν με τη μορφή x.y
, όπως συνηθίζεται π.χ. στη Java ή ακόμα και στην Python. Στη Ruby το y
εκλαμβάνεται πάντα ως ένα μήνυμα προς αποστολή (ή "μέθοδος προς κλήση"). Έτσι, οι μέθοδοι attr_*
δημιουργούν περιτυλίγματα τα οποία αντιπροσωπεύουν την πρόσβαση στην @μεταβλητή
της περίπτωσης μέσω δυναμικά δημιουργούμενων μεθόδων.
Boilerplate sucks
Ελπίζω αυτό να αποσαφηνίζει μερικές από τις μικρές λεπτομέρειες. Καλή κωδικοποίηση.
1 Αυτό δεν είναι απόλυτα αληθές και υπάρχουν κάποιες "τεχνικές" γύρω από αυτό, αλλά δεν υπάρχει συντακτική υποστήριξη για "public instance variable" πρόσβαση.
Βασικά προσποιούνται δημόσια προσβάσιμα χαρακτηριστικά δεδομένων, τα οποία η Ruby δεν διαθέτει.