【问题标题】:Error while creating an instance by using $self in a perl script在 perl 脚本中使用 $self 创建实例时出错
【发布时间】:2015-12-03 16:29:29
【问题描述】:

我尝试在我的 perl 脚本中创建一个对象。因此我有一个构造函数

new(;@)
{
     my $class = shift;
     my $self = {};
     bless $self, $class;
     $self->_init(@_);
     return $self;
}

还有我的_init(;@)函数,用来初始化对象

my $self = shift;
if( @_ )
{
    my %extra = @_;
    @$self{keys %extra} = values %extra;
}
return;

我是否以错误的方式使用这两个功能?我从两行开始每隔一个子

my $self = shift;
croak "instance method called for class" unless ref $self;

但我每次使用它时只会得到syntax / String found where operator expected 错误作为回报。

因此我的问题:我是否以正确的方式使用这两个功能?我一直认为我只需要初始化一次$self,就像我做的那样,并且可以为脚本的其余部分指出我想要的一切。

【问题讨论】:

    标签: perl attributes self shift


    【解决方案1】:

    croak 默认不加载。您必须在包中use Carp 才能使用它(请参阅Carp)。

    顺便说一句,方法调用会忽略原型。不要使用它们。 Don't use them for functions, either.

    您可以使用Class::Declare::Attributes 之类的内容来节省一些输入:

    sub new :class {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2021-03-14
      • 1970-01-01
      • 2020-11-06
      相关资源
      最近更新 更多