2009-09-16 10 views

cevap

6

'u kullanmaya başlarsanız, beğeninize MooseX::Types bulacaksınız. Türler otomatik olarak bir is_ $ type() ve to_ $ type() var. Bunlar, geçiş tipi kısıtlamalarını girdiğinizden emin olmak için veya girişinizi tür için geçerli bir zorlamaya sahip olduğunuzdan emin olmak içindir. Bu tür şeyler için bile onları daha iyi seviyorum çünkü nesnenizin durumunun söz konusu türlere ek ücret ödemeden sahip olmasını sağlayabilirsiniz.

use Moose; 
has 'foo' => (isa => MyType, is => ro); 

sub _check_my_type { 
    my ($self, $type) = @_; 
    is_MyType($type); 
}; 

Bu sizin Modern perl'de bu şeyler kullanıyorsanız muhtemelen "yanlış yapıyor." Konum derin/özyinelemeli türleri için bazı destek eksik, ama olabilir Bunun yerine, kendi tutarlılık kontrollerine sahip bir nesneyi kullanın (yukarıdaki gibi MyType ile benim gibi) ve sadece nesneyi geçirin.

+0

Eğer kullanabiliyorsanız Moose kötü bir öneri değildir. Yapamazsan, Fare Moose-light. Bu, Moose'un tüm bağımlılıkları olmadan ve aynı derleme zamanı isabeti ile size tür kontrolü ve birkaç şey daha kazandıracaktır. Açık olmak gerekirse, <3 Moose, ancak CGI'lar için ve böyle bir şey her zaman en iyi seçim değildir. – mikegrb

+2

Fare aktif olarak geliştirilmiyor. Ölü bir projedir (Mouse.pm'nin Doc'suna göre Mouse yerine Moose kullanın.). Ne yazık ki, Mouse docs bile CGI için bunu önermiyor! Bunun yerine, "Yıllar içinde önemli ilerlemeler kaydedilmiş olsa da, derleme zamanı cezası, bazı çok özel uygulamalar için bir başlatıcı değildir. Eğer başlangıç ​​zamanının gerekli olduğu bir komut satırı uygulaması veya CGI komut dosyası yazıyorsanız, Moose kullanamazsınız. Bunun yerine, mümkünse HTTP :: Engine ve FastCGI kullanmanızı öneririz. " http://rt.cpan.org/Public/Bug/Display.html?id=42203 –

5

Yalnızca argümanların onaylanmasından biraz daha fazlasını sağlayan MooseX::Method::Signatures'a bakın. POD gelen

Örnek:

package Foo; 

use Moose; 
use MooseX::Method::Signatures; 

method morning (Str $name) { 
    $self->say("Good morning ${name}!"); 
} 

method hello (Str :$who, Int :$age where { $_ > 0 }) { 
    $self->say("Hello ${who}, I am ${age} years old!"); 
} 

method greet (Str $name, Bool :$excited = 0) { 
    if ($excited) { 
     $self->say("GREETINGS ${name}!"); 
    } 
    else { 
     $self->say("Hi ${name}!"); 
    } 
} 

MooseX::Method::Signatures Perl plakasına daha seksi sözdizimi getiren MooseX::Declare gibi standart. Yukarıda böylece (sadece kısalık için ilk yöntem gösteriliyor) gibi yazılabilir:

use MooseX::Declare; 

class Foo { 

    method morning (Str $name) { 
     $self->say("Good morning ${name}!"); 
    } 
} 

düz değişmezler bir sonucu, signatures CPAN modülünü de vardır ama maalesef yukarıdaki gibi özellik olarak zengin değildir. Moose şöhretin hiper üretken programcı - -

2

Şu anda Dave Rolsky fark

OP aynı soruyu araştırıyorum geçenlerde Parametreler :: Doğrulama bakımı devralan (2009) vardır, bu yüzden bu düşünüyorum iyi bir işaret. Modül, 2003'ten beri güncellenmemiştir. Bu yüzden, yine de, altprogram parametrelerini kontrol etmek için tekrar kullanılabilir.

+0

Params :: Validate'ı seviyorum, ancak geçersiz paramları bir şekilde rapor etmekten ziyade komut dosyasının çalışmaya devam etmesini tercih etmek yerine ölmeyi tercih ediyor gibi görünüyor. ... – Marcus

İlgili konular