2009-09-16 3 views

답변

6

을 사용하기 시작하면 MooseX::Types을 원하는대로 찾을 수 있습니다. 유형에는 자동으로 is_ $ type() 및 to_ $ type()이 있습니다. 이것들은 타입 제약 조건을 입력하는지 확인하거나 타입에 대한 유효한 강제 변환을하기위한 것입니다. 나는 당신이 당신의 물체의 상태가 추가 비용없이 상기 유형을 갖출 수 있기 때문에 이러한 유형의 것들조차 더 잘 좋아합니다.

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

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

그것은 당신의 현대 펄이 물건을 사용하는 경우 당신은 아마 "잘못하고 있어요."하고 깊이/재귀 유형에 대한 약간의 지원이 부족 될 수 있지만 대신 자신 만의 일관성 검사 (MyType과 동일)를 가진 객체를 사용하고 객체를 전달하십시오.

+0

당신이 그것을 사용할 수 있다면 무스는 나쁜 제안이 아닙니다. 할 수 없다면 마우스가 무른 빛입니다. 이것은 여러분에게 타입 검사와 무언가의 의존성이없는 몇 가지 다른 것들을 얻을 것이다. 명확히 말하면, 나는 <3 무스지만 CGI의 경우 항상 최선의 선택은 아니다. – mikegrb

+2

마우스가 활발하게 개발되지 않았습니다. 그것은 죽은 프로젝트입니다 (Mouse.pm의 문서에 따라 마우스 대신 무스를 사용하십시오.). 불행히도 마우스 문서는 CGI 용으로 제안하지 않습니다. "몇 년 동안 상당한 발전이 있었지만, 컴파일 타임 페널티는 아주 특정한 애플리케이션에서 시작하지 못했습니다. 시작 시간이 필수적인 명령 행 애플리케이션이나 CGI 스크립트를 작성하는 경우 가능하다면 후자는 HTTP :: Engine과 FastCGI를 대신 사용하는 것이 좋습니다. " http://rt.cpan.org/Public/Bug/Display.html?id=42203 –

5

MooseX::Method::Signatures에서 인수를 검증하는 것 이상의 것을 제공합니다. POD에서

예 :

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 또한 펄 판에 더 섹시한 구문을 제공하는 MooseX::Declare와 같은 표준으로 제공됩니다. 위 그래서 (단지 간결 첫 번째 방법을 보여주는)와 같이 쓸 수있다 :

use MooseX::Declare; 

class Foo { 

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

일반 서브 루틴에 대한 추론 signatures CPAN 모듈도 있습니다하지만 불행히도 그것은 위와 같은 기능으로 풍부하지 않다. 무스 명성의 하이퍼 생산 프로그래머 - -

2

나는 현재 내가 데이브 Rolsky는 것으로 나타났습니다

영업과 같은 질문을 연구하고 최근에 Params : 검증의 유지 보수를 인수 (2009 년)이있다, 그래서 나는이 생각 좋은 징조. 모듈은 2003 년 이후로 업그레이드되지 않았습니다. 따라서 서브 루틴 매개 변수를 검사 할 때 다시 사용할 수 있습니다.

+0

나는 Params :: Validate를 좋아하지만 잘못된 매개 변수를 어떻게 든보고하고 스크립트가 계속 실행되도록하려면 죽는 것을 선호하는 것 같다. ... – Marcus

관련 문제