2009-09-17 12 views
7

Làm cách nào để khai báo biến lớp học dưới dạng dấu phẩy động trong Moose?Làm thế nào tôi có thể khai báo một biến lớp như là dấu chấm động trong Moose?

Mẫu (hư cấu) của tôi dưới đây tạo lỗi cho "Thực", "Số" v.v ... "Str" hoạt động nhưng đánh bại mục đích .. tìm kiếm/Google không trợ giúp, vì tôi không thể nhấn đúng điều kiện tìm kiếm ...


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

Trả lời

8

Kiểm tra các tài liệu hướng dẫn Moose Types. Không có loại float tích hợp, chỉ cần Num và loại phụ của nó Int. Điều này có ý nghĩa, vì Perl thực sự không phân biệt (rõ ràng) giữa phao và số nguyên.

Điều tốt nhất cần làm là sử dụng Num làm ràng buộc loại hoặc viết loại của riêng bạn ép buộc giá trị vào một số biểu mẫu phù hợp với nhu cầu của bạn.

+0

Tài liệu chính thức cho các loại mặc định có trong tài liệu Moose: http://search.cpan.org/dist/Moose/lib/Moose/Util/TypeConstraints.pm#Default_Type_Constraints – perigrin

6

Bạn cần Num kiểu cho một số thực:

{ 
    package Problem; 
    use Moose; 

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


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