Могу ли я определить функции вне класса, используя MooseX :: Declare? - PullRequest
8 голосов
/ 02 февраля 2009

Я недавно начал использовать модуль 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 );
}

Я вижу, что есть способ сделать класс изменчивым. Кто-нибудь знает как это сделать?

Ответы [ 2 ]

7 голосов
/ 02 февраля 2009

Легко (но нужно добавить в документ).

class BankAccount is mutable {
}

Кстати, почему вы определяете свои методы вне класса?

Вы можете просто пойти

class BankAccount is mutable {
    method foo (Int $bar) {
         # do stuff
    }
}
0 голосов
/ 03 февраля 2009

Я хочу, чтобы мое определение класса было коротким и давало абстрактное представление о том, для чего предназначен этот класс. Мне нравится, как это было сделано в C ++, где у вас есть возможность определять функции внутри или вне класса, используя оператор разрешения области видимости. Это делает определение класса коротким и аккуратным. Это то, что я ищу.

Спасибо за ваше время.

...