2009-09-17 2 views
7

Как объявить переменную класса плавающей точкой в ​​Moose?Как объявить переменную класса плавающей точкой в ​​Moose?

В приведенном ниже примере («вымышленный») появляются ошибки для «Реал», «Число» и т. Д. «Str» работает, но побеждает цель. Поиск/Google не помогает, так как я не могу набрать правильный условия поиска ...


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

ответ

8

Отъезд документации Moose Types. Нет встроенного поплавкового типа, всего Num и его подтипа Int. Это имеет смысл, поскольку Perl действительно не различает (видимо) между поплавками и целыми числами.

Лучшее, что можно сделать, это, вероятно, использовать Num в качестве ограничения типа или написать свой собственный тип, который будет использовать значение в той или иной форме, которая соответствует вашим потребностям.

+0

Официальная документация по умолчанию используется в документах Moose: http://search.cpan.org/dist/Moose/lib/Moose/Util/TypeConstraints.pm#Default_Type_Constraints – perigrin

6

Вам нужно Num типа для вещественного числа:

{ 
    package Problem; 
    use Moose; 

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


my $problem = Problem->new; 
say $problem->number; # => 0.1 
Смежные вопросы