加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中的数据封装?

发布时间:2020-12-15 22:02:42 所属栏目:大数据 来源:网络整理
导读:你好Perl社区在SO.我几年来一直在使用Perl,但由于我正在关注SO,所以我认识到Perl还不够. 我在过去4年写了相当大的脚本,并尝试以OO风格做到这一点.我知道Perl 6并不是真的OO. 所以我不喜欢的一点是,我没有数据封装,这意味着没有一个变量对于一个包(“class”)
你好Perl社区在SO.我几年来一直在使用Perl,但由于我正在关注SO,所以我认识到Perl还不够.

我在过去4年写了相当大的脚本,并尝试以OO风格做到这一点.我知道Perl< 6并不是真的OO. 所以我不喜欢的一点是,我没有数据封装,这意味着没有一个变量对于一个包(“class”)是真正私有的(或者也许我不知道该怎么做). 我有这样的东西(只有我的脚本的一小部分)

package TAG;

sub new () {
    my $classname = shift;
    my $self      = {};

    bless( $self,$classname );
    $self->initialize();
    return $self;
}

sub initialize() {
    my $self = shift;

    # Only an example,I have a long list of items in this "class"
    $self->{ID}          = "NA"; 
}

sub setID() {
    ...
}

sub getID() {
    ...
}

在我的主要脚本中,我以这种方式使用它:

my $CurrentItem;
$CurrentItem = new TAG();

$CurrentItem->getID()

$CurrentItem->{ID} = "Something";

也在工作,但我宁愿,这是不可能的.

有没有办法更好地封装我在“类”中使用的数据,所以我(或其他用户)被迫使用get和set方法?

解决方法

这是一个在几个地方讨论过的问题,有几个可能的解决方法,但并不一定是理想的.

This paper讨论了诸如闭包,标量和使用Tie :: SecureHash的有限访问哈希等选项,更喜欢最后的方法.

This blog认为,在perl中有时候应该加以封装,尽管这些意见提出了一些这样做的负面影响.

您还可以查看moose的Perl 5对象.这是为了鼓励使用encapsulated objects.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读