Wie gehe ich mit optionalen Parametern in Moose um?

8

Ich beginne gerade mit Perl OOP mit dem "Moose" -Paket.

Der Compiler beklagt sich, dass "Nicht-lvalue-Unterroutinenaufruf bei Parser.pm Zeile 16 nicht geändert werden kann."

Ich verstehe nicht ganz, warum ich nicht einfach ein neues Objekt zuweisen kann. Ich denke, es gibt eine bessere oder mehr gültige Möglichkeit, optionale Parameter mit Moose zu machen?

%Vor%     
Brian Johnson 24.02.2009, 16:22
quelle

3 Antworten

13

$self->mech ist ein Methodenaufruf; Sie können es nicht wirklich wie ein Feld in einer C-Struktur behandeln. Wenn Sie es festlegen möchten, müssen Sie das neue Objekt an es übergeben.

%Vor%     
friedo 24.02.2009, 17:09
quelle
6

Wahrscheinlich ist die bevorzugte Art, dies zu tun, lazy_build für das Attribut:

%Vor%

Dadurch kann das Attribut 'mech' beim ersten Aufruf gefüllt werden, sofern nicht vom Konstruktor oder vom Zugriffsmechanismus anders festgelegt (da es immer noch 'rw' ist).

    
perigrin 03.03.2009 15:56
quelle
5

Während Perl die Möglichkeit bietet, Attribute so zu verwenden, wie Sie es seit vielen Jahren versuchen (über so genannte Lvalue-Subs), ist es nicht etwas, das in den ersten OO Perl-Releases enthalten war und die Leute ziemlich viel gelernt haben darauf verzichten. Vor allem, da die Validierung etwas schwierig (und ineffizient) ist.

Sie könnten MooseX :: Meta :: Attribute :: Lvalue verwenden. aber (nach dem Dokument) auf Kosten der Typüberprüfung einiger Attribute.

Ich würde nur empfehlen, sich an das $ self & gt; -Attribut ("value") zu halten.

    
ysth 24.02.2009 18:28
quelle

Tags und Links