2009-09-17 12 views
7

Jak mogę zadeklarować zmienną klasy jako zmiennoprzecinkowy w Moose?Jak mogę zadeklarować zmienną klasy jako punkt zmiennoprzecinkowy w Moose?

Moja (fikcyjna) próbka poniżej zawiera błędy dla "Rzeczywistego", "Numeru" itd ... "Str" działa, ale pokonuje cel .. wyszukiwanie/Google nie pomaga, ponieważ nie mogę trafić poprawnie search terms ...


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

Odpowiedz

8

sprawdzeniu dokumentacji Moose Types. Nie ma wbudowanego typu float, tylko Num i jego podtypu Int. Ma to sens, ponieważ Perl naprawdę nie rozróżnia (widocznie) między liczbami zmiennoprzecinkowymi a liczbami całkowitymi.

Najlepszym rozwiązaniem jest prawdopodobnie użycie jako ograniczenia typu Num lub napisanie własnego typu, który wymusza wartość w jakiejś formie, która odpowiada Twoim potrzebom.

+0

Oficjalna dokumentacja dla domyślnych typów znajduje się w dokumentach Moose: http://search.cpan.org/dist/Moose/lib/Moose/Util/TypeConstraints.pm#Default_Type_Constraints – perigrin

6

Trzeba Num typ dla liczby rzeczywistej:

{ 
    package Problem; 
    use Moose; 

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


my $problem = Problem->new; 
say $problem->number; # => 0.1 
Powiązane problemy