Ich habe eine Klasse mit Attributen. Ich möchte überprüfen, ob einige, aber nicht alle definiert sind. Damit:
class A {
has $.a is rw;
has $.b is rw;
has $.c is rw;
has $.d is rw;
method delete { ... }
}
my A $x .= new(:a<hi>, :d<good>);
## later
$x.b = 'there';
## code in which $x.c may or may not be defined.
## now I want to check if the attributes a, b, and c are defined, without
## needing to know about d
my Bool $taint = False;
for <a b c> {
$taint &&= $x.$_.defined
}
Dies führt zu Fehlern, da ein Objekt vom Typ A keine Methode 'CALL-ME' für den Typ string hat.
Gibt es eine Introspektionsmethode, die mir die Werte von Attributen einer Klasse gibt?
$x.^attributes
gibt mir ihre Namen und Typen, aber nicht ihre Werte.
Ich denke, es muss seitdem einen Weg geben dd
oder .perl
Attributwerte liefern - denke ich.
class
raku
introspection
Richard Hainsworth
quelle
quelle
is rw
Merkmal auf die Klasse anwenden .Antworten:
Ja, es heißt
get_value
. Es benötigt das Objekt des Attributs, das an es übergeben wird. Zum Beispiel:quelle