Jon*_*han 2 perl inheritance class subclass exporter
我有这样一个基类:
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---
Run Code Online (Sandbox Code Playgroud)
我想要子类MyClass,但只适用于一种方法.
package MySubclass;
use MyClass;
use vars qw/@ISA/;
@ISA = 'MyClass';
sub my_method {
--- new method
}
Run Code Online (Sandbox Code Playgroud)
我想把它称为MySubclass我原来的MyClass,并且仍然可以访问所有的变量和函数Exporter.但是我在Exporter从原始类获取变量时遇到问题MyClass,要正确导出.我需要Exporter在子类内再次运行吗?这似乎多余而且不清楚.
示例文件:
#!/usr/bin/perl
use MySubclass qw/$ME/;
-- rest of code
Run Code Online (Sandbox Code Playgroud)
但是当我尝试导入$ME变量时,我遇到了编译错误.有什么建议?
您应该通过方法访问所有内容.忘记传递变量.
您收到语法错误,因为您有语法错误:
use MySubclass /$ME/; # syntax error - that's the match operator
Run Code Online (Sandbox Code Playgroud)
你想要一个清单:
use MySubclass qw/$ME/;
Run Code Online (Sandbox Code Playgroud)
但是,不要这样做.通过方法提供对这些数据的访问.由于您将继承这些方法,因此您不需要(也不应该使用)Exporter:
package MyClass;
BEGIN {
my $ME;
sub get_me { $ME }
sub set_me { $ME = shift }
}
Run Code Online (Sandbox Code Playgroud)
现在您的子类只是:
package MySubclass;
use parent( MyClass );
sub my_method { ... }
Run Code Online (Sandbox Code Playgroud)
如果您需要共享许多变量,有各种模块可以自动处理访问者详细信息.
| 归档时间: |
|
| 查看次数: |
4451 次 |
| 最近记录: |