Τι είναι το attr_accessor στη Ruby;

Δυσκολεύομαι να κατανοήσω το attr_accessor στη Ruby. Μπορεί κάποιος να μου το εξηγήσει;

attr_accessor είναι απλά μια μέθοδος. (Ο σύνδεσμος θα πρέπει να παρέχει περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί - κοιτάξτε τα ζεύγη μεθόδων που δημιουργούνται, και ένα σεμινάριο θα σας δείξει πώς να το χρησιμοποιήσετε).

Το κόλπο είναι ότι το class δεν είναι ορισμός στη Ruby (είναι "απλά ένας ορισμός" σε γλώσσες όπως η C++ και η Java), αλλά είναι μια έκφραση που αξιολογείται. Κατά τη διάρκεια αυτής της αξιολόγησης καλείται η μέθοδος attr_accessor, η οποία με τη σειρά της τροποποιεί την τρέχουσα κλάση - θυμηθείτε τον έμμεσο δέκτη: self.attr_accessor, όπου self είναι το "ανοιχτό" αντικείμενο της κλάσης σε αυτό το σημείο.

Η ανάγκη για το attr_accessor και τους φίλους του, είναι, λοιπόν:

  1. Η Ruby, όπως και η Smalltalk, δεν επιτρέπει την πρόσβαση σε μεταβλητές παραδείγματος εκτός των μεθόδων1 για το συγκεκριμένο αντικείμενο. Δηλαδή, οι μεταβλητές παραδείγματος δεν μπορούν να προσπελαστούν με τη μορφή x.y, όπως συνηθίζεται π.χ. στη Java ή ακόμα και στην Python. Στη Ruby το y εκλαμβάνεται πάντα ως ένα μήνυμα προς αποστολή (ή "μέθοδος προς κλήση"). Έτσι, οι μέθοδοι attr_* δημιουργούν περιτυλίγματα τα οποία αντιπροσωπεύουν την πρόσβαση στην @μεταβλητή της περίπτωσης μέσω δυναμικά δημιουργούμενων μεθόδων.

  2. Boilerplate sucks

Ελπίζω αυτό να αποσαφηνίζει μερικές από τις μικρές λεπτομέρειες. Καλή κωδικοποίηση.


1 Αυτό δεν είναι απόλυτα αληθές και υπάρχουν κάποιες "τεχνικές" γύρω από αυτό, αλλά δεν υπάρχει συντακτική υποστήριξη για "public instance variable" πρόσβαση.

Σχόλια (2)

Το attr_accessor είναι πολύ απλό:

attr_accessor :foo

είναι μια συντόμευση για:

def foo=(val)
  @foo = val
end

def foo
  @foo
end

δεν είναι τίποτα περισσότερο από ένα getter/setter για ένα αντικείμενο.

Σχόλια (2)

Βασικά προσποιούνται δημόσια προσβάσιμα χαρακτηριστικά δεδομένων, τα οποία η Ruby δεν διαθέτει.

Σχόλια (3)