2016-09-16 14 views
2

우리는 Perl Moo를 사용합니다.속성 유형을 변경하는 방법은 무엇입니까? (Perl Moo)

package C; 
use Moo; 
use Types::Standard qw(Str Int Num Maybe); 

has 'x' => (is=>'rw', isa=>Str); 
has 'y' => (is=>'rw', isa=>Int); 
has 'z' => (is=>'rw', isa=>Int); 

# here to insert make_optional() described below 

1; 

내가 몇 가지 속성에 대해 어쩌면 [T]와 T를 대체 할 루틴을 작성하려는 :

는 속성 세트가 정의하자. 예 : make_optional(qw(x y))xMaybe[Str] 유형이어야하며 유형은 yMaybe[Int]이어야합니다.

Moo와 함께하는 방법?

+2

많은 질문과 마찬가지로 다음과 같이 묻습니다. ** ** **? – simbabque

+0

@simbabque 우리는 (가볍고 기능이 풍부하지 않은) ORM (DBI + SQL 이상의 레벨)을 가지고 있습니다. 이제 나는 "비즈니스 객체"(ORM 이상의 레벨)를 만들기 위해 안수되었습니다. 비즈니스 오브젝트에 대한 유형 (및'has' 문) 중 일부는 DB 컬럼 정보에서 자동으로 생성됩니다. 하지만 수동으로 'undef' 값 (NULL 열과 같지 않음) ('Maybe' 유형)을 취할 수있는 열 목록을 손쉽게 지정해야하며 쉬운 방법으로 수행해야합니다. – porton

+0

DBIC에서와 같이 테이블 레이아웃이 변경 될 때마다 코드 생성기를 작성하여 실행할 수 있습니까? – simbabque

답변

4

수 없습니다.

Moo does not have a Meta Object Protocol. 그것 없이는 돌아가서 물건을 바꿀 수 없습니다.

메타 개체가 없습니다. 이 수준의 복잡성이 필요하다면 Moose-Moo는 명시 적으로 메타 프로토콜을 제공하지 않기 때문에 작습니다.

또한 형식은 단지 코드 참조 일뿐입니다.

내장형 시스템이 없습니다. isa는 코드 레터로 확인됩니다. 복잡한 유형이 필요한 경우 Type :: Tiny는 유형, 유형 라이브러리를 제공 할 수 있으며 무 (Moo) 및 무스 (Moose)와 원활하게 작동합니다.


당신은 어쩌면 Maybe[Str] 또는 Str처럼 동작 여부를 결정하기 위해 다른 곳 싱글 어떤 종류의 액세스 유형을 쓰고있다 할 수 있지만, '그 긴 샷입니다 아마도 추악한 미친 당신은 shouldn 무엇 그것을해라.

+0

그러나 나는 coderef'c'를 얻어서'Maybe [c]'로 대체 할 수있을 것 같습니다. 문제는 주어진 속성에 대한 코드화 코드를 얻을 수있는 곳입니다. – porton

+1

@porton 새로운 질문 일 수 있습니다. 아니면 #에 가서 물어보십시오. 그들은 그것에서 당신을 말하려고 노력할 것이지만, 그들은 도와 줄 것입니다. – simbabque