这不是数组引用吗?为什么不是数组引用?

ale*_*xis 2 oop perl perl-data-structures

我试图通过以下几行来调试一个令人费解的问题,深入研究我继承的程序,

my $log = [];
$root->validate_subtree($log); 
Run Code Online (Sandbox Code Playgroud)

导致以下错误

Treex :: PML :: Node :: validate:log必须是ARRAY引用

$root是一个类型的对象Treex::PML::Node,并且这两条线确实相邻 - 我没有留下任何东西.我去了错误消息的来源,并validate_subtree()检查其参数如下(Node.pm第423行):

sub validate_subtree {
  my ($node, $log) = @_;
  if (defined $log and UNIVERSAL::isa($log,'ARRAY')) {
    croak __PACKAGE__."::validate: log must be an ARRAY reference";
  }
Run Code Online (Sandbox Code Playgroud)

我认为这$log = [] 初始化$log为数组引用!我错过了什么?

Jon*_*ast 5

你是对的.您显示的代码确实设置$log为数组引用.这段代码:

sub validate_subtree {
  my ($node, $log) = @_;
  if (defined $log and UNIVERSAL::isa($log,'ARRAY')) {
    croak __PACKAGE__."::validate: log must be an ARRAY reference";
  }
Run Code Online (Sandbox Code Playgroud)

确切地说$log,实际上是数组引用时.我猜你在发行版中发现了一个错误,它应该是

  if (defined $log and not UNIVERSAL::isa($log,'ARRAY')) {
Run Code Online (Sandbox Code Playgroud)

  • @alexis:`$ log`是一个标量变量; 它*不能是一个数组,只是对数组的引用 (2认同)