Moduł Perl6::Parameters
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Obsługa modułu Perl6::Parameters
use Perl6::Parameters;
sub mysub($foo, ARRAY $bar, *%rest) {
...
}
Co to jest?
Moduł implementuje prototypowy styl Perla 6 z nazwanymi parametrami funkcji.
Jeżeli denerwuje Cię zdejmowanie ze stosu argumentów funkcji to coś dla Ciebie!
Szczegóły
Perl6::Parameters to moduł, który symuluje nazwane parametry szóstej wersji Perla. Kiedy mówie o "nazwanych parametrach" chodzi mi o te znane z C, Javy i innych języków, które nie przekazują parametrów w haszu.
Jak wiele innych języków programowania, Perl 6 będzie obsługiwał funkcje z pre-deklarowanymi zmiennymi. Na szczęscie używanie takiego stylu będzie opcjonalne.
Kod my($first, $second)=(@_) będzie można zastąpić takim sub mysub($first, $second). Ten moduł wprowadza taką funkcjonalność do Perla 5. Używa także innych własności charakterystycznych dla Perla 6 np.: nazw wbudowanych Perla 6 i gwiazdki do spłaszczania listy.
Tworzenie listy parametrów
Tworzenie list parametrów jest proste. Deklarujemy funkcje i wstawiamy parametry w nawiasy oddzielone przecinkami lub średnikami. Użycie średnika implikuje opcjonalność reszty parametrów.
Większość parametrów to zmienne skalarne jak $foo, jednak bardziej wyszukane zachowanie też jest możliwe. Są trzy sposoby by to osiągnąć.
Pierwszy sposób to zdefiniowanie typu zmiennej. Niektóre typy zamieniają prawdziwe parametry w referencje do siebie:
- ARRAY $foo
- Zamienia tablice na referencje do siebie samej i zapisuje tą referencje do zmiennej $foo.
- HASH $foo
- Zamienia hasza na referencje do siebie samego i zapisuje tą referencje do zmiennej $foo.
- CODE $foo
- Zamienia funkcję na referencje do siebie samej i zapisuje tą referencje do zmiennej $foo.
- SCALAR $foo
- Zamienia skalar na referencje do siebie samego i zapisuje tą referencje do zmiennej $foo.
- GLOB $foo
- Zamienia typegloba na referencje do siebie samej i zapisuje tą referencje do zmiennej $foo. Typegloby mają zniknąć z Perla 6 jednak ten typ istnieje w module, ponieważ jest generalnie przydatny w Perlu 5.
- REF $foo
- Zamienia jakikolwiek parametr na referencje do siebie samego i zapisuje tą referencje do zmiennej $foo
- AnythingElse $foo
- Taki zapis nie ma żadnego efektu. Jest traktowany jakbyś napisał samo $foo bez AnythingElse.
Przykład
Jeżeli funkcja ma tak zdefiniowaną listę parametrów: ($foo, HASH $bar, CODE $baz) i jest wywołana z ($scalar, %hash, &mysub) to funkcja otrzyma zawartość zmiennej $scalar, referencje do %hash i referencje &mysub.
Drugi sposób to dostarczenie nazwy istniejącej tablicy bądź hasza jako nazwa parametru. Następnie należy dla tego parametru podać tablicę lub hasz. Zachowuje to wielkość tablicy bądź hasza.
Trzeci sposób jest tylko dostępny dla ostatniego parametru: jeżeli tablica lub hasz jest poprzedzona gwiazdką to ta tablica lub hasz będzie zawierała wszystkie dodatkowe parametry.
Zastrzeżenia
- W Perlu 6 parametry będą przekazwyane przez stałą referencje. W tym module parametry są przekazywane przez wartość.
- W Perlu 6 dopisanie is rw na końcu parametru udostępni ten parametr do zapisu i odczytu. Próba użycia is rw spowoduje błąd.
- @_ i %_ może być użyte tylko dla ostatniego parametru i tylko kiedy jest poprzedzone gwiazdką. W innych przypadkach zachowanie jest niezdefiniowane.
- W Perlu 6 definicja podobna doHASH $foo zostanie potraktowana jak literał hasza (ze znakiem % na początku) lub jako referencja do hasza. Ten moduł wymaga znaku %. (Podobne ograniczenie dotyczy też tablic.)
Błędy
Na razie nie stwierdzono, ale jeżeli jakiś znajdziesz to wyślij go na <bug-Perl6-Parameters@rt.cpan.org> i CC <brentdax@cpan.org>.Dodatkowe informacje
Cała dokumentacja znajduje się na http://search.cpan.org/~brentdax/Perl6-Parameters-0.03/Parameters.pm
Autor opracowania
P.B.