Raku-Kurs / Objekte, Ein- und Ausgabe und Ausnahmen / Klassen und Objekte
Rollen
Eine Rolle ist ein Bündel aus Verhalten (und mitunter Daten), das sich mehrere Klassen teilen können. Wo Vererbung sagt, eine Klasse sei eine Art einer anderen, beschreibt eine Rolle etwas, das eine Klasse kann.
Sie definieren eine Rolle mit dem Schlüsselwort role,
ganz ähnlich wie eine Klasse, und geben sie einer Klasse mit dem Trait
does:
role Greet {
method hello {
'Hello from ' ~ self.name;
}
}
class Person does Greet {
has $.name;
}Die Klasse Person hat nun die Methode hello
aus der Rolle, als wäre sie in der Klasse selbst geschrieben:
say Person.new(name => 'Anna').hello; # Hello from AnnaEine Klasse, die eine Rolle erfüllt, wird auch als Trägerin dieser Rolle erkannt:
say Person.new(name => 'Anna') ~~ Greet; # TrueBeachten Sie, dass die Methode hello der Rolle
self.name verwendet, obwohl die Rolle selbst kein Attribut
name hat. Das ist in Ordnung: Die Methode läuft als Teil
derjenigen Klasse, die die Rolle einbindet, und diese Klasse liefert
name. Das nächste Thema zeigt, dass eine Klasse mehr als
eine Rolle zugleich übernehmen kann.
Themen in diesem Abschnitt
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Abschnitts.
Übungen
Dieser Abschnitt enthält 3 Übungen. Sehen Sie sich alle Themen dieses Abschnitts an, bevor Sie mit den Übungen beginnen.
Kursnavigation
← Lösung: Ein geerbtes Attribut | Mehrere Rollen komponieren →