2009-02-02 3 views
8

최근에 MooseX::Declare 모듈을 사용하기 시작했습니다. 나는 그 구문을 좋아한다. 그것은 우아하고 청초하다. 누구든지 클래스 내에 많은 함수 (큰 것 중 일부)를 작성하고 페이지로 실행되는 클래스 정의를 작성하려는 경우가 있습니다. 함수 정의를 선언하고 클래스 외부의 실제 함수 정의 만 클래스 정의를 만들 수있는 해결 방법이 있습니까?MooseX :: Declare?를 사용하여 클래스 외부에서 함수를 정의 할 수 있습니까?

class BankAccount { 
    has 'balance' => (isa => 'Num', is => 'rw', default => 0); 
    # Functions Declaration. 
    method deposit(Num $amount); 
    method withdraw(Num $amount); 
} 

# Function Definition. 
method BankAccount::deposit (Num $amount) { 
    $self->balance($self->balance + $amount); 
} 

method BankAccount::withdraw (Num $amount) { 
    my $current_balance = $self->balance(); 
    ($current_balance >= $amount) 
    || confess "Account overdrawn"; 
    $self->balance($current_balance - $amount); 
} 

나는 클래스를 변경할 수 있도록하는 방법이 있음을 볼 수있다 - 내가 찾는하고 무엇

이 같은 것입니다. 아무도 그것을하는 방법을 알고 있습니까?

답변

7

간편하지만 (문서에 추가해야 함).

class BankAccount is mutable { 
} 

왜 클래스 외부에서 메서드를 정의하고 있습니까?

당신은

class BankAccount is mutable { 
    method foo (Int $bar) { 
     # do stuff 
    } 
} 
0

내가 내 클래스 정의가 짧게 할 갈 수 있고, 클래스가 무엇인지의 추상적 인 아이디어를 제공 할 수 있습니다. 저는 C++에서 수행 된 방식을 좋아합니다. 여기서는 범위 분석 연산자를 사용하여 함수를 인라인 또는 클래스 외부에서 정의 할 수있는 옵션이 있습니다. 이것은 클래스 정의를 짧고 깔끔하게 만듭니다. 이것이 제가 찾고있는 것입니다.

감사합니다.

+0

저자에게 전자 메일을 보내고 훌륭한 작품에 대해 감사하고 구문을 좋아한다고 말한 다음 그러한 일이 가능하다고 생각하는지 물어보고 그가 기꺼이 그렇게 할 수 있는지 물어보십시오. 최악의 경우 그는 '아니오'라고 말할 수 있습니다. 게시 할 또 다른 곳은 사슴 메일 링리스트입니다. – daotoad

관련 문제