相关疑难解决方法(0)

如何灵活地向Moose对象添加数据?

我正在为驼鹿物体写一个模块.我想允许使用此对象的用户(或我自己......)根据需要随时添加一些字段.我无法先验地定义这些字段,因为我根本不知道它们会是什么.

我目前只是添加了一个名为extra的hashref类型的字段rw,因此用户可以简单地将东西放入该哈希:

# $obj is a ref to my Moose object    
$obj->extra()->{new_thingie}="abc123"; # adds some arbitrary stuff to the object
say $obj->extra()->{new_thingie};
Run Code Online (Sandbox Code Playgroud)

这有效.但是......这是一种常见的做法吗?还有其他(可能更优雅)的想法吗?

注意我不想创建另一个扩展这个模块的模块,这实际上只是为了我想添加的即时内容.

perl moose

7
推荐指数
2
解决办法
2030
查看次数

对于不再在Perl中使用的对象,我该怎么办?

我正在编写一个链接到外部资源的类.其中一种方法是破坏外部资源的删除方法.不应该对该对象进行进一步的方法调用.如果设置了标志,我想在所有方法中设置一个标志和死亡,但是有更好,更简单的方法吗?可能涉及DESTROY的东西?

到目前为止,我真的很喜欢Axeman的建议,但使用AUTOLOAD是因为我懒得重新创建所有方法:

#!/usr/bin/perl

use strict;
use warnings;

my $er = ExternalResource->new;

$er->meth1;
$er->meth2;

$er->delete;

$er->meth1;
$er->meth2;

$er->undelete;

$er->meth1;
$er->meth2;

$er->delete;

$er->meth1;
$er->meth2;
$er->meth3;

package ExternalResource;

use strict;
use warnings;

sub new {
    my $class = shift;
    return bless {}, $class;
}

sub meth1 {
    my $self = shift;
    print "in meth1\n";
}

sub meth2 {
    my $self = shift;
    print "in meth2\n";
}

sub delete {
    my $self = shift;
    $self->{orig_class} = ref $self;
    return bless $self, "ExternalResource::Dead";
}

package …
Run Code Online (Sandbox Code Playgroud)

oop perl design-decisions

4
推荐指数
1
解决办法
360
查看次数

标签 统计

perl ×2

design-decisions ×1

moose ×1

oop ×1