Piszę moduł dla obiektu łosia. Chciałbym pozwolić użytkownikowi używającemu tego obiektu (lub sobie ...) dodać pola w locie, tak jak tego chce. Nie mogę zdefiniować tych pól a priori, ponieważ po prostu nie wiem, co one będą.Jak mogę elastycznie dodawać dane do obiektów na Moose?
Obecnie prostu dodaje jedno pole o nazwie Extra typu hashref która jest ustawiona na rw
, dzięki czemu użytkownicy mogą po prostu umieścić rzeczy w tym hash:
# $obj is a ref to my Moose object
$obj->extra()->{new_thingie}="abc123"; # adds some arbitrary stuff to the object
say $obj->extra()->{new_thingie};
To działa. Ale ... czy to powszechna praktyka? Jakieś inne (być może bardziej eleganckie) pomysły?
Uwaga Nie chcę tworzyć kolejnego modułu, który rozszerza ten, to naprawdę tylko do rzeczy w locie, które chciałbym dodać.
+1 To naprawdę fajne! –
Czy mogę skasować akcesor, jeśli próbuję odczytać (nie ustawić) nieistniejącego pola? –
Możesz zawinąć accessor 'custom_field' z modyfikatorem dookoła, sprawdź args i rechot, jeśli 'has_custom_field' zwraca false. – phaylon