2009-02-02 14 views
8

J'ai récemment commencé à utiliser le module MooseX::Declare. Je l'aime pour sa syntaxe. C'est élégant et soigné. Quelqu'un a-t-il rencontré des cas où vous voudriez écrire de nombreuses fonctions (dont certaines sont grandes) dans une classe et la définition de la classe dans les pages? Y at-il une solution de contournement pour que la définition de classe ait simplement les fonctions déclarées et la définition de fonction réelle en dehors de la classe?Puis-je définir des fonctions en dehors d'une classe en utilisant MooseX :: Declare?

Ce que je cherche est quelque chose comme ça -

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

Je vois qu'il ya une façon de faire la classe mutable. Est-ce que quelqu'un sait comment le faire?

Répondre

7

Facile (mais doit être ajouté au document). En aparté, pourquoi définissez-vous vos méthodes en dehors de la classe?

Vous pouvez simplement aller

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

Je veux que ma définition de la classe pour être bref, et pour donner une idée abstraite de ce que la classe est pour. J'aime la façon dont cela a été fait en C++ où vous avez une option pour définir les fonctions en ligne ou en dehors de la classe en utilisant l'opérateur de résolution de portée. Cela rend la définition de la classe courte et nette. C'est ce que je cherche.

Merci pour votre temps.

+0

Envoyez un courriel à l'auteur, remerciez-le pour son excellent travail, dites-lui que vous aimez la syntaxe, puis demandez-lui s'il pense qu'une telle chose est possible, et s'il serait prêt à le faire. Le pire qui puisse arriver est qu'il peut dire «non». Un autre endroit pour poster serait la liste de diffusion de l'orignal. – daotoad