Bonjour,

J'essaye de retrouver dans un tableau de point (objet Moose), le point le plus à gauche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?