Должен ли я использовать autobox в Perl? - PullRequest
13 голосов
/ 05 октября 2009

Для тех, кто не знает о Perl autobox, это модуль, который предоставляет вам методы для встроенных примитивов и позволяет даже переопределять их.

# primitives
'a string'->toupper();
10->to(1); # returns [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# Arrays, array refs
[qw(A B C D E)]->for_each( sub { ... } );
@array->length()

# Hashes, hash refs
{ key => 'value', key2 => 'value2' }->values()
%hash->keys()

# Even specify your own base class...
use autobox SCALAR => 'Foo';

Это в целом делает методы встроенных типов более похожими на объекты, упрощая некоторые задачи и делая другие более очевидными.

Однако ...

Документы autobox говорят о том, что штрафы за производительность , несколько больше, чем просто вызов метода для объекта, намного больше, чем стандартный синтаксис. И затем, есть несколько предостережений по поводу его использования в eval s (в частности, уклонение строк), которые могут, в некоторых обстоятельствах, вызывать проблемы. Также похоже, что это не входит в стандартную комплектацию многих Perl дистрибутивы.

Стоит ли когда-нибудь использовать autobox?

Ответы [ 3 ]

10 голосов
/ 05 октября 2009

Ну, вы когда-нибудь хотели, чтобы был модуль, который делал то, что autobox делает, прежде чем вы узнали о autobox ?

Если ответ «да», то вам следует использовать его. Возможно, вы также захотите внести свой вклад в его разработку, подав отчеты об ошибках и исправив их, если у вас появится такая возможность.

К сожалению, я попал в лагерь "круто, но ...", поэтому я не могу предложить вам больше понимания.

6 голосов
/ 05 октября 2009

Лошади на курсы! Однако читать цепочку слева направо часто проще, ИМХО:

say sort grep /\w/, map { chr } 0 .. 255;

В то время как короче ниже, лучше течет:

say [ 0..255 ]->map( sub { chr } )->grep( sub { m/\w/ } )->sort->join(''); 

ref: фрагмент от комментариев Hacker News

/ I3az /

5 голосов
/ 06 октября 2009

Я использую autobox для:

$c->login($c->req->{params}->hslice([qw/username password/])

В результате получается произвольный хеш и уменьшается до { username => <whatever>, password => <whatever> }. Обычно много кода. Один символ с Moose :: Autobox.

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