perl - 是否存在与接口(interface)等效的 OO Perl?

标签 perl oop interface

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

最佳答案

您可以创建一个纯虚拟类(或角色,如果您使用 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" };

但执行将在运行时进行。通常,需要接口(interface),因为该语言不支持多重继承并且是严格类型的。 Perl 支持多重继承和(使用 Moose)类似多重继承(但更好)的东西,称为角色,它是动态类型的。严格类型与动态类型归结为鸭子类型(如果它像鸭子一样 quacks()、像鸭子一样的 walks() 和像鸭子一样的 Swims(),那么它就是鸭子)。在 Perl 中,你说:
if ($some_obj->can("quack") {
    $some_obj->quack;
} else {
    croak "incompatible class type: ", ref $some_obj;
}

关于perl - 是否存在与接口(interface)等效的 OO Perl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1367119/

相关文章:

Perl Exporter 在子类中使用来自@EXPORT_OK 的变量

perl - 这个数组是散列还是标量?

perl - 是否可以只对 Perl 中的子例程调用进行计时?

javascript - 在 JS 中定义类(ES5 与原型(prototype))

java编码: public interface extend remote

c# - 为什么我的接口(interface)的 BaseType 为空?

perl - 从perl cgi动态输出json数据

java - Java中如何快速判断一个方法是否被重写

c# - 我有一个基类。如何为正确的派生类调用正确的方法?

Cocoa:ABPeoplePickerView - 如何在单击一个人时触发方法?