死了,Perl不能保佑我的对象
发布时间:2020-12-15 21:27:29 所属栏目:大数据 来源:网络整理
导读:Puns抛在一边,我试图在我的Perl类中实现一个导入方法来实例化一个数据对象,这个实例本质上是一个很好的散列数组,来自一个合适的hashref数组. 以下是我计划如何使用它的示例: # Pull in the datamy $data = Data-import( [ { a = 1,b = 7,c = 3},{ a = 7,b =
Puns抛在一边,我试图在我的Perl类中实现一个导入方法来实例化一个数据对象,这个实例本质上是一个很好的散列数组,来自一个合适的hashref数组.
以下是我计划如何使用它的示例: # Pull in the data my $data = Data->import( [ { a => 1,b => 7,c => 3},{ a => 7,b => 9,c => 2},] ); $data->manipulate; # Use package methods 我的进口实施如下: package Data; sub initialize { my $class = shift; my $data = []; bless $data,$class; return $data; } sub import { my ( $class,$data ) = @_; bless $data,$class; return $data; } 1; 令人惊讶的是,Perl在编译时报告错误(注意BEGIN块): Can't bless non-reference value at Data.pm line 51. BEGIN failed--compilation aborted at myScript.pl line 8.
我甚至尝试初始化对象并在两个单独的步骤中添加数据: sub import { #< Another constructor > my ( $class,$data ) = @_; my $obj = $class->initialize; push @$obj,@$data; return $obj; } 这导致以下编译时错误: Can't use an undefined value as an ARRAY reference... BEGIN failed--compilation aborted at... 两个问题: >我做了什么事情怎么了? 解决方法
import()是给出方法的危险名称,因为Perl有时会为您调用一个名为“import”的方法.其实声明如下:
use Data; 真正意思: BEGIN { require Data; Data->import(); } 这在“编译”期间发生. 因此,在您有机会使用它之前,可能您的import()方法被Perl调用,作为类加载机制的一部分.您应该将import()方法重命名为其他(例如import_data),您应该很好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |