2009-09-17 52 views
7

如何在Moose中声明一个类变量作为浮点?如何在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(); 

回答

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

你需要类型实数:

{ 
    package Problem; 
    use Moose; 

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


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