2009-09-17 12 views
7

Come posso dichiarare una variabile di classe come punto mobile in Moose?Come posso dichiarare una variabile di classe come punto mobile in Moose?

Il mio campione (fittizio) di seguito produce errori per, "numero" ... opere "reali" etc "STR", ma contrasta con l'obiettivo .. ricerca/Google non aiuta, visto che non posso colpire il corretto termini di ricerca ...


PROBLEM.pm

package PROBLEM; 
use strict; 
use warnings; 
use Moose; 

has 'PROBLEM'=> (isa=>'real',is =>'ro',required=>'0',default=>sub {0.1;}); 

main.pl

use strict; 
use warnings; 

use PROBLEM; 

my $problem=PROBLEM->new(); 

risposta

8

Controllare la documentazione Moose Types. Non esiste un tipo float incorporato, solo Num e il suo sottotipo Int. Questo ha senso, dal momento che Perl non distingue (visibilmente) tra float e interi.

La cosa migliore da fare è probabilmente utilizzare Num come vincolo di tipo o scrivere il proprio tipo che costringe il valore in una forma che si adatta alle proprie esigenze.

+0

La documentazione ufficiale per i tipi predefiniti si trova nei documenti di Moose: http://search.cpan.org/dist/Moose/lib/Moose/Util/TypeConstraints.pm#Default_Type_Constraints – perigrin

6

È necessario Num tipo per un numero reale:

{ 
    package Problem; 
    use Moose; 

    has 'number' => ( 
     isa  => 'Num', 
     is  => 'ro', 
     default => sub { 0.1 }, 
    ); 
} 


my $problem = Problem->new; 
say $problem->number; # => 0.1 
Problemi correlati