2009-02-02 6 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