首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >驼鹿Perl和oop Perl?

驼鹿Perl和oop Perl?
EN

Stack Overflow用户
提问于 2013-04-12 15:19:56
回答 1查看 2.5K关注 0票数 0

驼鹿Perl和oop Perl有什么区别?

为什么我们使用Moose Perl来代替oop Perl?

EN

回答 1

Stack Overflow用户

发布于 2013-04-12 15:33:39

驼鹿Perl是OO。Moose是建立在Perl 5 OO系统之上的对象框架。

Moose为您提供了大量工具,使OO更易于使用和更健壮。Perl的对象系统非常简单;它允许您做任何您想做的事情,这是非常强大的,但它也意味着您必须自己完成所有事情。例如,在纯OO中,您可以实现一个对象来表示2D平面中的一个点。

代码语言:javascript
复制
package Point;

use strict;
use warnings;

use Carp 'croak';

sub new { 
    my $class = shift;
    my %args = @_;

    # do a lot of complex and potentially buggy validation here
    # to make sure you have both an X and a Y coordinate, that
    # they're both numbers, etc.

    return bless \%args, $class;
}

现在我们需要做一些访问器和变异器

代码语言:javascript
复制
sub x { 
    my $self = shift; 
    my $val = shift;

    $self->{x} = $val;
}

上面的代码是有问题的。你知道为什么吗?我们还必须对y参数进行复制。我们可以复制和粘贴代码,或者至少可以将符号化名以避免C&P。

在驼鹿中,这一定义如下:

代码语言:javascript
复制
package Point;
use Moose; 

has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');

这样做的目的是:

  • 为您打开strictwarnings
  • 设置一个构造函数,以验证xy是整数。
  • xy字段设置(无buggy的)访问器和变异器
  • 为内省设置元类,并提供元对象。

您只需四行代码就可以免费获得所有这些(实际上还有更多)。

如果您还不熟悉Perl的工作方式,我建议您阅读(然后再重新阅读) Perl OO教程

那就开始读关于驼鹿的书吧。一个很好的起点是驼鹿::手册过氧化物酶。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15975137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档