Ας υποθέσουμε ότι έχουμε μία κλάση Klass,
class Klass
def initialize
@a=1 ; @b=2
end
end
Αν φτιάξεις ένα αντικείμενο
k=Klass.new
δεν μπορείς να διαβάσεις τις τιμές των μεταβλητών (instance variables
@a,@b), αλλά και ούτε να τις αλλάξεις.
Για να γίνει αυτό θα πρέπει να δηλωθούν μέσα στην κλάση μία μέθοδος
ανάγνωσης (getter) και εγγραφής (setter) για κάθε μεταβλητή.
class Klass
def initialize
@a=1 ; @b=2
end
def a #getter
return @a
end
def a=(x) #setter
@a=x
end
end
Τώρα ,
k=Klass.new;
print k.a #=> 1
k.a=3
print k.a #=>3
Επειδή είναι πολύ συχνό φαινόμενο, για να μην φτιάχνουμε κάθε φορά
αυτές τις 2 μεθόδους υπάρχουν τα shortcuts:
attr_reader :a # ορίζει μόνο τη μέθοδο getter : def a; a; end
attr_writer :a # ορίζει μόνο τη μέθοδο setter: def a=(x); @a=x; end
attr_accessor :a # και τις δύο παραπάνω
Για παράδειγμα για τη μεταβλητή @b
class Klass
attr_writer :b
def initialize
@a, @b = 1, 2
end
end
k=Klass.new
k.b=3 #=> θα αλλάξει τη μεταβλητή @b σε 3, αλλά
print k.b #=> θα δώσει λάθος γιατί έχω δηλώσει μόνο το attr_writer
αν έχεις χρησιμοποιήσει ποτέ Java, τότε οι συναρτήσεις attr_accessor,
attr_reader και attr_writer κάνουν ότι κάνουν και οι setter και getter
methods για τις μεταβλητές
σου όταν μέσα στην κλάση σου. Απλώς εδώ με την Ruby, δεν χρειάζεται να
γράψεις τον κώδικα.
Στον περέχει η Ruby.
Thanx