avoir une fonction min() avec des objets
Bonjour,
J'essaye de retrouver dans un tableau de point (objet Moose), le point le plus à gauche.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#Point.pm
use v5.10;
package Point;
use Moose;
has 'x', is => 'rw', required => 1;
has 'y', is => 'rw', required => 1;
return 1;
#!/usr/bin/perl
use v5.10;
use Point;
use Data::Dumper;
use List::Util qw(first max maxstr min minstr reduce shuffle sum);
sub min_o (&@){
my $code_ref = shift;
return reduce {$code_ref->($a) < $code_ref->($b) ? $a : $b} @_;
}
my @pts;
push(@pts,Point->new(x=>1,y=>1),Point->new(x=>0,y=>0));
say Dumper reduce {$a->x < $b->x ? $a : $b} @pts;
say Dumper min_o {$_->x} @pts; |
Le "reduce" fonctionne bien, mais comme parfois je cherche le point le plus à droite, ou ceci ou cela, je me disais que je pourrais créer un fonction min_o (o pour objet), ou je passe en fonction anonyme le critère de recherche du minima, dans mon cas, la réel $_->x, mais ça pourrait être un calcul plus compliqué qui renvoie un réel.
Cela permettrait d'écrire à chaque fois
Code:
min_o {fonction_renvoyant_un_réel} @pts
mais ça ne marche pas.
Bon, je débute dans les fonctions anonymes et je me suis inspiré (un grand merci) des 3 articles "La programmation fonctionnelle en Perl"
une idée ?