Introduction:
Mouse 是 Moose 的简化版,没有提供扩展,只有 Moose 的 OO 核心功能,效率据说比 Moose 快了三四倍.如果你只用到 Moose 的 OO 核心功能,那么可以用Any::Moose 在两种实现间自动切换,另外 Any::Moose 还提供自动加载 MooseX::*扩展的功能,但由于没有现成的 MouseX::* 对应物,所以要么直接用 Moose,要么自己写一个 MouseX 扩展了.
Moose 是 Perl 5 中一个完整的对象系统,就象任何现代的面向对象的语言一样( Perl5 绝对不是),它提供一些属性声明,对象构造,继承,和其它更多的关键字.这些关键字是语言的一部分,所以你不关心它们是如何实现.
Moose 的目的是在 Perl 5 中实现,让 Perl 5 的面向对象做到同样的事情.实际上,这些关键字并不是我们创造的.它只是我们提示的 "糖",看起来和本身的关键字一样.在 Moose 中,你只要确认你的类的声明,不需要了解 blessed 这个 HASH 的引用,在存取的方法.你只需要专注于你类的逻辑结构,重点是"做什么",而不是"如何做".
Moose 很大程度是基于在 Perl 6 的面向对象系统,以及从 CLOS,Smalltalk 和许多其他语言中借鉴最好的想法.
Moose 是由Pugs 的开发人员Stevan Little 写的.
概要
1
2
3
4
5
6
7
|
package
Point;
use
Moose;
has
'x'
=> ( isa =>
'Int'
, is =>
'ro'
);
has
'y'
=> ( isa =>
'Int'
, is =>
'rw'
);
__PACKAGE__->meta->make_immutable;
|
描述
这 Moose 的元类( metaclass) API 提供了 make_immutable() 的方法,调用这个方法会对你的类做二样事.
- 首先,这使得它更快.特别是对象的构造和 destruction (析构?)是有效的“内联”你的类,并不再调用元API.
- 其次,你可以不再需要通过元类的 API 来做改变,如添加属性.在实践中,这不会是一个问题,因为你很少需要在第一次加载类之后做这些.
结论
我们强烈建议您让您的类,象这样成为不可改变的.它使你的代码要比原来快得多,只使用小小的编译时间来当做成本.这将在创建很多对象时显得尤其明显.