我可以使用 MooseX::Declare 在类之外定义函数吗?

Posted

技术标签:

【中文标题】我可以使用 MooseX::Declare 在类之外定义函数吗?【英文标题】:Can I define functions outside of a class using MooseX::Declare? 【发布时间】:2010-10-04 21:16:09 【问题描述】:

我最近开始使用模块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 );

我可以看到有一种方法可以使类可变。有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

我希望我的类定义简短,并给出类用途的抽象概念。我喜欢它在 C++ 中完成的方式,您可以选择使用范围解析运算符在内联或类外定义函数。这使得类定义简洁明了。这就是我要找的。​​p>

感谢您的宝贵时间。

【讨论】:

给作者发邮件,感谢他的出色工作,告诉他你喜欢这个语法,然后问他是否认为这样的事情是可能的,他是否愿意做。可能发生的最坏情况是他可以说“不”。另一个发帖的地方是 moose 邮件列表。【参考方案2】:

简单(但需要添加到文档中)。

class BankAccount is mutable 

顺便说一句,你为什么要在类之外定义你的方法?

你可以走了

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

【讨论】:

以上是关于我可以使用 MooseX::Declare 在类之外定义函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

面向对象中的定义

内部类之静态内部类

Java多线程同步工具类之CyclicBarrier

Java并发工具类之CountDownLatch

Java类之File记录

java内部类之成员内部类