8

最近、モジュール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 );
}

クラスを可変にする方法があることがわかります。誰かがそれを行う方法を知っていますか?

4

2 に答える 2

7

簡単です(ただし、ドキュメントに追加する必要があります)。

class BankAccount is mutable {
}

余談ですが、なぜクラス外でメソッドを定義しているのですか?

あなたはただ行くことができます

class BankAccount is mutable {
    method foo (Int $bar) {
         # do stuff
    }
}
于 2009-02-02T11:33:59.227 に答える
0

クラスの定義を短くして、クラスの目的を抽象化したいと考えています。スコープ解決演算子を使用してインラインまたはクラス外で関数を定義するオプションがある C++ で行われた方法が気に入っています。これにより、クラス定義が短くすっきりとします。これが私が探しているものです。

御時間ありがとうございます。

于 2009-02-03T06:12:56.987 に答える