2009-09-17 6 views
7

¿Cómo puedo declarar una variable de clase como punto flotante en Moose?¿Cómo puedo declarar una variable de clase como punto flotante en Moose?

Mi muestra (ficticia) a continuación produce errores para "Real", "Número", etc ... "Str" funciona pero infringe el propósito ... buscar/Google no ayuda, ya que no puedo presionar el botón correcto los términos de búsqueda ...


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(); 

Respuesta

8

Mira la documentación Moose Types. No hay un tipo de flotador incorporado, solo Num y su subtipo Int. Esto tiene sentido, ya que Perl realmente no diferencia (visiblemente) entre flotantes y enteros.

Lo mejor que se puede hacer es usar Num como la restricción de tipo, o escribir su propio tipo que coaccione el valor en alguna forma que se adapte a sus necesidades.

+0

La documentación oficial para los tipos predeterminados se encuentra en los documentos de Moose: http://search.cpan.org/dist/Moose/lib/Moose/Util/TypeConstraints.pm#Default_Type_Constraints – perigrin

6

Usted necesita Num tipo para un número real:

{ 
    package Problem; 
    use Moose; 

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


my $problem = Problem->new; 
say $problem->number; # => 0.1 
Cuestiones relacionadas