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

perl – 如何在哈斯存储哈希哈希?

发布时间:2020-12-15 23:23:54 所属栏目:大数据 来源:网络整理
导读:我想知道,在穆斯存储哈希哈希的最佳方法是什么.让我们举一个像这样的Hash: my %hash = ('step1' = {'extraction' = $object1,'analysis' = $object2},'step2' = {'extraction' = $object3,'analysis' = $object4}); 但我想将这个保存在驼鹿属性中.我该
我想知道,在穆斯存储哈希哈希的最佳方法是什么.让我们举一个像这样的Hash:

my %hash = ('step1' => {'extraction' => $object1,'analysis' => $object2},'step2' => {'extraction' => $object3,'analysis' => $object4});

但我想将这个保存在驼鹿属性中.我该如何组织访问(阅读,写作).网上的例子主要是“扁平”哈希.但是你可以使用像Moose :: Meta :: Attribute :: Native :: Trait :: Hash这样的助手.哈希散列有类似的东西吗?

原因是,我想迭代步骤键并访问其中的对象实例.或者是否有更好的,更像Moose的方式来做到这一点?

提前致谢!!!

解决方法

您可以在Moose对象中存储散列哈希,其方式与存储任何其他哈希的方式非常相似:

has steps => ( is => 'ro',isa => 'HashRef' );

但是,您可以更具体地将其声明为您需要存储的特定哈希类型,以验证存储在该槽中的任何内容是正确的类型:

has steps => ( is => 'ro',isa => 'HashRef[HashRef[Object]]' );

根据数据,我可能还会将Object更改为类名.你可以变得更加漂亮,并使用MooseX::Types和MooseX::Types::Structured来指定更严格的结构.

至于要跨过你的结构的助手,我不知道在Moose或MooseX中做任何事情.如果你知道数据的结构,最好只实现一个子程序来自己做你需要的.您的代码可能会比任何通用遍历更好地执行您所需要的操作.

编辑/附加信息:每个Moose属性创建一个访问器方法,而不是您的类返回存储的值,因此访问数据是:

# Assuming we put the attribute in a package named StepTool
my $step_tool = StepTool->new(
    steps => { 'step1' => {'extraction' => $object1,'analysis' => $object4} },);

# To do something one of the values
do_something($step_tool->steps->{step1}{extraction});

# To iterate over the structure,could be done in a method on StepTool
for my $step_name (keys %{ $step_tool->steps }) {
    my $step = $step_tool->steps->{ $step_name };

    for my $action_name (keys %$step) {
        my $object = $step->{ $action_name };

        do_something($object);
    }
}

# If doing the above as a method,$self is the Moose object,so...
sub traverse_steps {
    my ($self) = @_;

    for my $step_name (keys %{ $self->steps }) {
        ... # just like above
    }
}

还有一点,你仍然可以使用traits => [‘哈希’]并添加一些句柄,如果你愿意,给自己一些额外的助手.

如果数据结构比这更自由,您可能需要查看类似于Data::Visitor的内容来迭代子例程中的结构. (我有一些难以调试,Data :: Visitor的奇怪问题,所以我尽量避免使用它.)

(编辑:李大同)

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

    推荐文章
      热点阅读