gpt4 book ai didi

perl - 如何在 Perl 中的基类和子类之间共享变量?

转载 作者:行者123 更新时间:2023-12-02 05:35:23 27 4
gpt4 key购买 nike

我有一个这样的基类:

package MyClass;

use vars qw/$ME list of vars/;
use Exporter;
@ISA = qw/Exporter/;
@EXPORT_OK = qw/ many variables & functions/;
%EXPORT_TAGS = (all => \@EXPORT_OK );

sub my_method {

}
sub other_methods etc {

}

--- more code---

我想子类化 MyClass,但只针对一种方法。

package MySubclass;

use MyClass;
use vars qw/@ISA/;
@ISA = 'MyClass';

sub my_method {

--- new method

}

我想像调用原始 MyClass 一样调用此 MySubclass,并且仍然可以访问 Exporter 中的所有变量和函数>。但是,我在从原始类 MyClass 中获取 Exporter 变量以正确导出时遇到问题。我需要在子类中再次运行 Exporter 吗?这似乎是多余且不清楚的。

示例文件:

#!/usr/bin/perl

use MySubclass qw/$ME/;

-- rest of code

但是当我尝试导入 $ME 变量时出现编译错误。有什么建议吗?

最佳答案

您应该通过方法访问所有内容。忘记传递变量吧。

你收到语法错误是因为你有一个语法错误:

 use MySubclass /$ME/; # syntax error - that's the match operator

你想要一个列表:

 use MySubclass qw/$ME/;

但是,不要那样做。通过方法提供对这些数据的访问。由于您将继承这些方法,因此您不需要(也不应该使用)Exporter:

 package MyClass;

BEGIN {
my $ME;
sub get_me { $ME }
sub set_me { $ME = shift }
}

现在你的子类是:

 package MySubclass;
use parent( MyClass );
sub my_method { ... }

如果您有许多需要共享的变量,有各种模块可以自动为您处理访问器详细信息。

关于perl - 如何在 Perl 中的基类和子类之间共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671845/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com