InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby kann man leicht durcheinanderkommen, wenn es um Zugriffslevel auf Methoden geht - besonders in Fällen mit self. Auf den ersten Blick scheinen protected und private ähnlich zu sein, aber der Unterschied zeigt sich genau darin, wie Ruby Aufrufe über self interpretiert.
In Ruby kann jede Methode auf zwei Arten aufgerufen werden:
do_something # ohne self self.do_something # mit self
public - Methoden sind immer verfügbarprotected - nur für Objekte derselben Klasse oder Unterklasse verfügbarprivate - nur ohne expliziten Empfänger (self) verfügbar
private - kann nicht über self aufgerufen werden
Private Methoden sind Methoden, die nur "innerhalb von sich selbst" aufgerufen werden können. Ruby erlaubt es nicht, einen Empfänger (self) anzugeben, selbst wenn es sich um dasselbe Objekt handelt.
class User
def greet
self.secret_message # nicht erlaubt
end
def greet_ok
secret_message # erlaubt
end
private
def secret_message
"Hallo von privat"
end
end
user = User.new
user.greet_ok # => "Hallo von privat"
user.greet # => NoMethodError
private beschränkt den Aufruf nur im Kontext des aktuellen Objekts, ohne explizites self.
protected - kann über self aufgerufen werden, aber nur unter Objekten derselben Klasse
Im Gegensatz zu private erlauben protected-Methoden Aufrufe über self oder eine andere Instanz, wenn sie zur selben Klasse oder Unterklasse gehören.
class User
def initialize(age)
@age = age
end
def older_than?(other)
self.age > other.age # erlaubt über self
end
protected
def age
@age
end
end
u1 = User.new(30)
u2 = User.new(20)
u1.older_than?(u2) # => true
protected wird oft verwendet, wenn man zwischen Instanzen derselben Klasse vergleichen oder interagieren möchte, aber externem Code keinen Zugriff gewähren möchte.
public - ohne Einschränkungen
Öffentliche Methoden sind immer verfügbar, sowohl mit self als auch ohne.
class User
def greet
self.name
end
def name
"Marian"
end
end
User.new.greet # => "Marian"
Zusammenfassend
- public - Methoden sind für alle verfügbar.
- protected - Methoden können über self und zwischen Instanzen derselben Klasse aufgerufen werden.
- private - Methoden können nur ohne self innerhalb des aktuellen Objekts aufgerufen werden.
Um all dies zu merken - erstellen Sie eine rb-Datei lokal und experimentieren Sie mit dem Code. Nur durch praktische Anwendung kann man den Unterschied gut verstehen.
Dieser Beitrag hat noch keine Ergänzungen vom Autor.