Benutzerdefinierte Konstrukteure müssen bless
nennen, dh
class MyClass {
has $.var1;
method new($var1) {
return self.bless(var1 => $var1);
}
}
Es gibt ein paar Dinge, die verbessert werden können, zB
- man könnte eine explizite Aufrufer Parameter hinzufügen und
:U
.new()
zu machen verwenden scheitern beim Aufruf von Instanzen Objekte
- die explizite
return
ist überflüssig - der letzte Ausdruck innerhalb der Methode wird trotzdem zurückgegeben, und zur Zeit, es tut weh tatsächlich Leistung
- es für das Bestehen ein benanntes Argument in einer Variablen mit dem gleichen Namen gehalten syntaktischer Zucker ist
setzen sie alle zusammen, wir am Ende mit
class MyClass {
has $.var1;
method new(MyClass:U: $var1) {
self.bless(:$var1);
}
}
Was wo Ihr Fehler kommt von:
Ihre Methode new
wird deklariert, um ein Positionsargument zu nehmen (mit einer Gesamtanzahl von 2 erwarteten Argumenten aufgrund des impliziten Aufrufs), aber der Aufruf MyClass.new(var1 => $var1)
an Ich habe einen Namen gegeben. Beachten Sie, dass diese Methode die einzige ist, die in Ihrer Klasse vorhanden ist. Wenn also der Aufruf tatsächlich funktioniert hätte, hätten Sie eine unendliche Rekursion erhalten!