2009-09-17 7 views
7

Wie kann ich eine Klassenvariable als Fließkomma in Moose deklarieren?Wie kann ich eine Klassenvariable als Fließkomma in Moose deklarieren?

Mein (fiktives) Beispiel unten erzeugt Fehler für "Real", "Number" etc ... "Str" funktioniert aber besiegt den Zweck .. Suche/Google hilft nicht, da ich nicht das richtige treffen kann Suchbegriffe ...


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

Antwort

8

Schauen Sie sich die Moose Types Dokumentation. Es gibt keinen integrierten Float-Typ, nur Num und seinen Subtyp Int. Dies ist sinnvoll, da Perl (sichtbar) nicht zwischen Floats und Integers unterscheidet.

Das Beste, was zu tun ist, ist wahrscheinlich, Num als Typ Einschränkung zu verwenden, oder schreiben Sie Ihren eigenen Typ, der den Wert in eine Form, die Ihren Bedürfnissen entspricht, zwingt.

+0

Die offizielle Dokumentation für Standardtypen finden Sie in der Elch-Dokumentation: http://search.cpan.org/dist/Moose/lib/Moose/Util/TypeConstraints.pm#Default_Type_Constraints – perigrin

6

Sie benötigen Num Typ für eine reelle Zahl:

{ 
    package Problem; 
    use Moose; 

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


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