В Perl, на каком основании следует выбирать между передачей ссылки на хэш / массив и передачей скаляра hashref / arrayref? - PullRequest
1 голос
/ 02 марта 2011

Короче говоря, мне интересно, есть ли наилучшие причины для выбора между:

my %hash = ( foo => 1, bar => 2 );
# some in-between logic
some_func(\%hash);

и

my $hashref = { foo => 1, bar => 2 };
# some in-between logic
some_func($hashref);

Или это чисто стилевое решение?

Ответы [ 4 ]

1 голос
/ 02 марта 2011

Два эквивалента и взаимозаменяемы.Решение должно приниматься исходя из того, что для вас является наиболее понятным.

Вы также можете перемещаться назад и вперед:

my $hashref = {x => 1, y => 2};

our %hash; *hash = $hashref;

some_func($hashref);
some_func(\%hash);    # \%hash == $hashref

В целом я предпочитаю работать с формами множественного числа %name и@name, поскольку это приводит к меньшему шуму в линии из-за разыменования.Это и some_func(\%var) яснее в отношении типа var, чем some_func($var)

1 голос
/ 02 марта 2011

Эти два примера делают одно и то же.Таким образом, это в основном зависит от того, что более удобно для чего-либо еще, во всяком случае, что вы делаете с переменной %list и / или $listref.

Или, возможно, вы хотите полностью пропустить дополнительную переменную:

some_func( { foo => 1, bar => 2 } );

(Менее вероятно, теперь, когда вы добавили эти комментарии "между логиками".)

1 голос
/ 02 марта 2011

Как указано выше, они одинаковы, хотя первый может дать вам лучший контекст для того, какой тип переменной (то есть хеш) вы используете в своем коде "некоторая промежуточная логика".

0 голосов
/ 02 марта 2011

В большинстве случаев это не будет иметь значения, но у меня были некоторые неприятные ошибки, которые возникали при попытке изменить местоположение моих контрольных точек, если я передаю список референций.

Если я действительно нехочу изменить содержимое ранее существовавшего массива или хэша, я лично предпочитаю использовать анонимные списки / хэши (как ваш второй пример).

Хотя это всего лишь личный опыт.Я признаю, что, возможно, если бы я лучше понимал Perl, я бы знал объективные лучшие практики (если таковые имеются).

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