Dla nieświadomych Perla autobox
, jest to moduł, który daje metody wbudowane w prymitywy, i pozwala nawet zastąpić je.Czy powinienem używać autoboxa w Perlu?
# 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';
Ogólnie rzecz biorąc, metody oparte na wbudowanych typach bardziej przypominają obiekty, upraszczają niektóre zadania i sprawiają, że inne wydają się bardziej oczywiste.
Jednak ...
się autobox
docs powiedzieć, że istnieje performance penalties, niektóre bardziej niż po prostu wywołanie metody na obiekt, o wiele więcej niż standardowej składni. And then, there's a few caveats about its use in eval
s (specifically, string evals) that might, in some circumstances, cause issues. Wygląda na to, że nie jest standardem dla wielu dystrybucji Perla.
Czy naprawdę warto korzystać z autobox?
To całkiem fajne! – Geo
To jest całkiem fajne, ale część mnie nie może nic poradzić na rzecz "Gdybym chciał użyć Rubiego ..." –
Rozumiem, dlaczego Java i C# robią autoboxing: Zbiory działają tylko na obiektach przy użyciu określonych metod odziedziczonych z podstawowego obiektu klasa (prawdopodobnie przesłonięta), więc prymitywne typy są zapakowane do ich typów obiektów, zanim zostaną umieszczone w kolekcji. Perl nie ma czegoś takiego, więc po co prostuje pudełka w obiektach? – Powerlord