2009-02-02 15 views
8

Recentemente ho iniziato a utilizzare il modulo MooseX::Declare. Lo adoro per la sua sintassi. È elegante e pulito. Qualcuno si imbatte in casi in cui si vorrebbe scrivere molte funzioni (alcune delle quali grandi) all'interno di una classe e la definizione della classe in esecuzione in pagine? C'è qualche soluzione alternativa per rendere la definizione della classe solo per avere le funzioni dichiarate e la definizione della funzione reale al di fuori della classe?Posso definire funzioni al di fuori di una classe usando MooseX :: Declare?

Quello che sto cercare è qualcosa di simile -

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

vedo che c'è un modo per rendere la classe mutevole. Qualcuno sa come farlo?

risposta

7

Facile (ma deve essere aggiunto al documento).

Per inciso, perché stai definendo i tuoi metodi al di fuori della classe?

Si può solo andare

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

Voglio che la mia definizione di classe di essere breve, e per dare un'idea astratta di ciò che la classe è per. Mi piace il modo in cui è stato fatto in C++ in cui hai un'opzione per definire le funzioni in linea o al di fuori della classe usando l'operatore di risoluzione dell'ambito. Questo rende la definizione della classe breve e ordinata. Questo è quello che sto cercando.

Grazie per il vostro tempo.

+0

Invia una e-mail all'autore, ringrazialo per il suo eccellente lavoro, digli che ami la sintassi, e poi chiedigli se pensa che una cosa del genere sia possibile, e se sarebbe disposto a farlo. Il peggio che può succedere è che può dire "no". Un altro posto per postare sarebbe la mailing list delle alci. – daotoad

Problemi correlati