以链接的方式使用散列让我很困惑。例如,我阅读了以下Perl代码,如何逐段理解它们?
$model->{result}->{forcast}->[$index]->{label} = 1;
$Neg{$examples->{result}->[$index]->{title}} = 1另外,为什么有些项目有$,比如$index;而其他项目没有,比如label。
$index封装在{ }中,而其他封装在{}中,这里有什么区别?
$Neg{$examples->{result}->[$index]->{title}} = 1是否等同于$Neg{$examples->{result}->[$index]->{title}} = 1
发布于 2011-12-19 12:19:39
考虑一下:
$model->{result}->{forcast}->[$index]->{label} = 1;->[]用于取消对数组引用的引用。
->{}用于取消对散列引用的引用。
让我们从左边开始扫描:
$model是散列引用(由于它在上下文中使用:$model->{})result是散列键(因为它没有符号prepended)$model->{result}再次是散列reference$model->{result}->{forcast}是数组引用(由于它在上下文中使用:$model->{result}->{forcast}->[])$index是用户设置的变量,可能包含数组的索引item$model->{result}->{forcast}->[$index]是散列引用label是一个哈希键,它将1设置为哈希键的值
哈希键可以是无字的,系统会自动将其引起来。因此,将散列键指定为result或'result'是相同的。
perldoc perldsc是数据结构的食谱。在查看这样的数据结构时,Data::Dumper非常有用。
发布于 2011-12-19 12:17:53
你不应该有像那样没有引号的纯文本散列键。这样说:
$model->{'result'}->{'forcast'}->[$index]->{'label'} = 1因此model是一个hashref,它有一个关键字'result‘,这是一个hashref,它有一个关键字'forcast’(不会拼写?)它是一个数组引用,其在索引$index处具有散列引用,该散列引用具有被设置为1的关键字‘标签’。
在第二个中,%Neg是一个散列,它有一个键,它是嵌套散列和数组链中的“title”元素。
至于你的最后一个问题,是的,因为你把同样的东西写了两次。
https://stackoverflow.com/questions/8557022
复制相似问题