[bcn-pm] En un objecte, fer servir el varlor d'un atribut per crear dinàmicament els altres atributs

mimosinnet mimosinnet a gmail.com
dim gen 15 09:35:14 PST 2013


El dissabte, 12 de gener del 2013 a les 13:05, Miquel Ruiz va escriure:

> Sí que es pot, gràcies a Moose::Meta::Class. Un exemple molt tonto:

Mil gràcies! He provat l'exemple i funciona. M'ha servit per veure les
meravelles que es poden fer amb Moose i les perillositats que comporten.

A partir del codi que vas enviar, el que ve a continuació dona els atributs del
la classe Sys obtinguts dinàmicament a partir dels continguts del
directory Sys; i amb poques línies de codi! Qué bonic és Perl quan
arribes a entendre'l!

---
#!/usr/bin/perl 
use 5.010; use strict; use warnings; use Moose;

# Get a list of files from /sys
my @files = split /\s+/, `ls /sys`;

# Class generation
my $meta = Moose::Meta::Class->create('Sys');

# One attribute per subdirectory in /sys
$meta->add_attribute($_ => (is => 'ro')) for @files;

# populate each attribute with an arrayref with the contents of the dir
my @args  = map { $_ => [ split /\s+/, `ls /sys/$_` ] } @files;
                                                               
my $sys = $meta->new_object(@args);

my $meta1 = Class::MOP::Class->initialize("Sys");

for my $attr ( $meta1->get_all_attributes ) {
	my $an = $attr->name;
    say "Atribute Name = $an";
}


-- 
Mimosinnet
Linux User: #463211
41:24:51N (41.4141) 2:11:24E (2.1902)

Ningún Lugar
Activisme Cultural per a la Transformació Social
http://generatech.org/ningunlugar

Fractalitats en Investigació Crítica
Investigació Crítica per a la Transformació Social
http://psicologiasocial.uab.es/fic

-------------- part següent --------------
A non-text attachment was scrubbed...
Name: no disponible
Type: application/pgp-signature
Size: 198 bytes
Desc: no disponible
URL: <http://mail.pm.org/pipermail/barcelona-pm/attachments/20130115/43257068/attachment.bin>


Més informació sobre la llista de correu Barcelona-pm