Moose ArrayRef-Attribut als Array zurückgegeben

8

Ich habe eine Moose-Klasse mit einem Attribut, das ein ArrayRef (schreibgeschützt) ist und intern vom Objekt manipuliert wird. Aber wenn jemand die Accessor-Methode aufruft, will ich, dass er ein Array (oder eine Liste) zurückgibt, keine Referenz. Dies würde nicht nur die Dereferenzierung verringern, die der Benutzer der Klasse ausführen muss, sondern es wird auch bedeuten, dass sie nicht versehentlich dieselbe Referenz manipulieren können, die mein Objekt verwendet.

Was ist der beste Weg, dies zu tun? Eine Art Zwang?

    
mpeters 07.12.2009, 18:04
quelle

3 Antworten

17

Verwenden Sie Elch :: Meta :: Attribut :: Nativ: : Merkmal :: Array und Delegation, zB

%Vor%

(über doy auf #moose)

auto_deref hat das unerwünschte Verhalten, immer noch eine Referenz zu liefern, wenn Sie den Accessor im skalaren Kontext aufrufen.

    
hdp 07.12.2009, 18:31
quelle
6

Sie können auto-deref verwenden, Elch :: Manual :: BestPractices sagt, dass dies nicht der beste Weg ist, und stattdessen sollten Sie Moose :: Meta :: Attribut :: Native , um diese Funktionalität zu erreichen.

    
Adam Bellaire 07.12.2009 18:32
quelle
3

Verwenden Sie die Option auto_deref :

%Vor%

Beachten Sie, dass Sie manchmal ein Array nicht zurückbekommen, wenn Sie die Reader-Methode verwenden, abhängig vom Skalar- oder Listenkontext des Ausdrucks. Vor einiger Zeit kam ich in eine Situation, in der ich den Array-Kontext explizit zum Ausdruck bringen musste, damit die Dereferenzierung funktioniert. Ich füge ein Beispiel hinzu, wenn ich es finden kann.

    
Ether 07.12.2009 18:28
quelle

Tags und Links