Как я могу объявить переменную класса в Moose с плавающей точкой? - PullRequest
7 голосов
/ 17 сентября 2009

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

Мой (вымышленный) пример ниже приводит к ошибкам для "Real", "Number" и т. Д. ... "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();

Ответы [ 2 ]

8 голосов
/ 17 сентября 2009

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

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

6 голосов
/ 17 сентября 2009

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

{
    package Problem;
    use Moose;

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


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