Perl:强制继承模块

时间:2016-10-06 15:04:51

标签: perl inheritance

我有一个Perl包(例如汽车),它是一些其他模块的基类(例如面包车,豪华轿车,敞篷车......) -

data <- data.frame(x=1:20,y=runif(20)*2-1)
p <- ggplot(data=data,aes(x=x,y=y)) + geom_line() + scale_y_continuous(breaks=seq(-1,1,0.5),limits=c(-1,1))
p

在van的pm文件中,......

我需要确保不使用汽车 - 只允许使用继承的物品(货车,豪华轿车......)。

今天我在基类内部使用ref()。如果它返回“car”的名称,我知道它在没有继承的情况下使用,然后我退出并出现错误。

如果使用van,...,则ref()将返回“van”,...

是否有更优雅/静态的方式来做到这一点。让我们说一种方法,我可以得到一种语法错误??

不是:与OO语言相比,我不喜欢讨论OO主题中Perl的弱点; - )

修改 这是一个例子。它有效。

问题是,如果这是一个更好的方法来检查car :: new。

use base ("car");

1 个答案:

答案 0 :(得分:5)

您不会显示您的代码,但听起来您没有在正确的位置进行检查;你应该只需要在构造函数中执行此操作:

sub new {
    my ($class, @other_args) = @_;
    if ($class eq __PACKAGE__) {
        Carp::croak "must be subclassed";
    }

但不,没有办法在编译时这样做。