我可以在Perl中创建类似Java的接口吗?

Ale*_*hov 13 oop perl interface object abstract

我知道Perl的OO模型相当原始; 在大多数方面,它本质上是命名空间黑客攻击.

不过,我想知道是否有可能创建类似"界面"的东西?我的目标是建立一个扩展其他基类的基类,其主要目的是强制要求这些子类实现某些方法(名称很好,不需要签名).我真的不在乎它是一个"纯虚拟"类(如Java中的"接口")还是具有超类中这些方法的实际实现存根的具体类,但我想要的是确定它是确定性必要的子类实现超类的某些方法.

这可能吗?如果是这样,怎么样?

Dav*_*sky 28

以下是使用Moose的答案......

package Comparable;
use Moose::Role;

requires 'eq';

package Person;

has size => (
    is   => 'ro',
    does => 'Comparable',
);
Run Code Online (Sandbox Code Playgroud)

现在,size属性必须是实现Comparable"interface"的对象.在Moose-land中,接口是角色,角色不仅仅是接口定义.


Ala*_*avi 10

我不确定你将如何实现它.但是,看看Moose,它是"Perl 5的后现代对象系统".

  • 使用Moose,角色可以执行Java接口的功能.他们也可以做更多,但只有一个必需方法列表的角色是一个界面. (8认同)

Igo*_*kon 6

类别::合同可以帮助这一点.它支持编译时合同检查.


Tat*_*eva 5

我认为强制实现/重载基类的函数/ subs的整个想法对Perl来说是陌生的.您会在哪个时刻设想执法机制有效?

如果您在运行时执行此操作是正常的,那么如果调用基类的实现,则可能会死亡.

编辑:实际上,是的,Class :: Contract似乎是要走的路.