Estoy escribiendo un módulo para un objeto alce. Me gustaría permitir que un usuario que use este objeto (o yo mismo ...) agregue algunos campos sobre la marcha como lo desee. No puedo definir estos campos a priori ya que simplemente no sé lo que serán.¿Cómo puedo agregar datos de manera flexible a los objetos Moose?
que actualmente simplemente añade un solo campo llamado extra de tipo hashref que es está establecido en rw
, por lo que los usuarios pueden simplemente poner cosas en ese resumen:
# $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};
Esto funciona. Pero ... ¿es esta una práctica común? ¿Alguna otra idea (posiblemente más elegante)?
Nota: No deseo crear otro módulo que extienda este, esto realmente solo para cosas sobre la marcha que me gustaría agregar.
+1 ¡Eso es realmente genial! –
¿Puedo hacer que el descriptor de acceso no funcione correctamente si trato de leer (no configurar) un campo que no existe? –
Puede ajustar el descriptor de acceso 'custom_field' con un modificador de alrededor, verificar los argumentos y croar si 'has_custom_field' devuelve falso. – phaylon