Использование хэшей в цепочке - PullRequest
2 голосов
/ 19 декабря 2011

Использование хэшей в цепочке очень смущает меня.Например, я читал следующие коды 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

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

Учтите:

$model->{result}->{forcast}->[$index]->{label}  = 1;

->[] используется для разыменования ссылки на массив.
->{} используется для разыменования ссылки на хэш.

Давайте отсканируем ее изСлева:

  • $model - ссылка на хеш (поскольку она используется в контексте: $model->{})
  • result - это ключ хеша (как ине имеет префикс $ с символом *)
  • $model->{result} снова является ссылкой на хеш
  • $model->{result}->{forcast} является ссылкой на массив (поскольку он используется в контексте: $model->{result}->{forcast}->[])
  • $index - переменная, установленная пользователем, которая, возможно, содержит индекс элемента массива
  • $model->{result}->{forcast}->[$index] - ссылка на хеш
  • label - хешkey
  • $model->{result}->{forcast}->[$index]->{label} устанавливает 1 в качестве значения для хеш-ключа

Хеш-ключи могут быть голыми словами, которые будут автоматически заключаться в кавычки.Таким образом, указание ключа хеша как result или 'result' одинаково.

perldoc perldsc - это поваренная книга для структур данных.Data::Dumper очень полезен при просмотре таких структур данных.

0 голосов
/ 19 декабря 2011

У вас не должно быть таких простых хэш-ключей без кавычек. Скажите это:

$model->{'result'}->{'forcast'}->[$index]->{'label'} = 1

Таким образом, модель является хеш-ссылкой, у нее есть ключ 'result', который является хеш-ссылкой, который имеет ключ 'forcast' (не может записать?), Который является arrayref, который в индексе $index имеет хеш-ссылку, который имеет ключ 'label', который устанавливается в 1.

Во втором * %Neg - это хеш с ключом, который является элементом title из цепочки вложенных хешей и массивов.

А что касается вашего последнего вопроса, то да, потому что вы написали одно и то же дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...