我有一个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");
答案 0 :(得分:5)
您不会显示您的代码,但听起来您没有在正确的位置进行检查;你应该只需要在构造函数中执行此操作:
sub new {
my ($class, @other_args) = @_;
if ($class eq __PACKAGE__) {
Carp::croak "must be subclassed";
}
但不,没有办法在编译时这样做。