加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

指示一个类是否在Perl中实现接口有多重要?

发布时间:2020-12-15 21:46:05 所属栏目:大数据 来源:网络整理
导读:我和朋友一直在讨论代码风格问题.我们有一系列通过命名子例程返回特定类型值来实现接口的包.例如: package Foo::Type::Bar;sub generate_foo { # about 5-100 lines of code return stuff here;} 所以你可以去: my $bar_foo = Foo::Type::Bar-generate_foo
我和朋友一直在讨论代码风格问题.我们有一系列通过命名子例程返回特定类型值来实现接口的包.例如:
package Foo::Type::Bar;
sub generate_foo {
    # about 5-100 lines of code
    return stuff here;
}

所以你可以去:

my $bar_foo = Foo::Type::Bar->generate_foo;
my $baz_foo = Foo::Type::Baz->generate_foo;

我们有很多这些,都在同一个Foo :: Type :: *层次结构下.

我认为软件包应该清楚地表明它们实现了foo_generate接口,例如:

package Foo::Type::Bar;
use base 'Foo::Type';
sub generate_foo {
    ...
    return stuff here;
}

我认为这是一种很好的代码风格,对于其他编写代码的程序员来说更加清晰和干净.它还允许您检查Foo :: Type :: Bar-> isa(‘Foo :: Type’)以查看它是否实现了接口(子系统的其他部分完全是OO).

我的朋友不同意.他提出的一些论点是:

> Foo :: Type :: *包清楚地命名,并且仅在内部项目中使用,因此不存在想知道给定包是否实现接口的问题
>软件包通常很小,是独立子系统的一部分,他们觉得像批处理文件或conf文件一样,不是很重的Perl OO代码
> Perl通过继承表示实现,这可能很复杂或有问题,特别是当一个人获得多重继承时
>添加一个Foo :: Type超类不会添加任何值,因为它实际上是一个空包,仅用于启用 – > isa lookups
>以编程方式指示接口实现是个人代码风格的问题

我们中的一个人是“正确的”吗?你会怎么做?

编辑:在示例中,将Foo :: Generator重命名为Foo :: Type

解决方法

如果你问这些问题,我想你应该升级到Moose.在那里,您将能够通过使用适当的抽象方法创建角色或类来定义您的界面.

我同意你这样做可以增加有价值的信息.在Java中,存在“标记接口”的概念,其是一个空接口,其没有方法仅存在于将一组类标记为对某些目的有用的方法.最常见的例子是Serializable接口.

当然,仅仅因为它可能有用并不意味着它将在你的特定情况下.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读