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?
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.
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.
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.