OO Perl是否等同于接口?

时间:2009-09-02 11:24:40

标签: perl oop interface

我知道使用OO Perl我可以拥有对象和继承,但是实现了接口吗?如果是这样,他们是如何执行的?

4 个答案:

答案 0 :(得分:17)

您可以创建纯虚拟类(如果您使用MooseMooseX::Declare,则可以创建角色):

package Foo;

use strict;
use Carp;

sub new  { croak "new not implemented" };
sub do_x { croak "do_x not implemented" };
sub do_y { croak "do_y not implemented" };

但执法将在运行时进行。通常,需要接口,因为该语言不支持多重继承并且是严格类型的。 Perl支持多重继承和(使用Moose)类似多重继承(但更好)的角色,它是动态类型的。严格的vs动态类型归结为鸭子打字(如果它像鸭子一样quacks(),像鸭子一样散步(),像鸭子一样游泳(),那么它就是一只鸭子。在Perl中,你说:

if ($some_obj->can("quack") {
    $some_obj->quack;
} else {
    croak "incompatible class type: ", ref $some_obj;
}

答案 1 :(得分:11)

在传统的Perl OO中,实施的很少。您可以选择$ obj-> can('methodname')来躲避您正在使用的内容,但没有什么比接口更像。

(但是看看Moose,那里的角色可能就是你所追求的。)

答案 2 :(得分:10)

但当然! Class::Interface

那就是说,我先看看穆斯。太棒了。

答案 3 :(得分:1)

  需要

接口,因为该语言不支持

接口是一个OOP概念。由于技术问题,不需要它们。