2011-12-16 8 views
6

Podczas czytania pobranego modułu Perla znalazłem kilka sposobów definiowania parametrów wejściowych, które są wymienione poniżej. Jakie są między nimi różnice?Jakie są różnice między mechanizmami wprowadzania parametrów w Perlu?

sub new{ 
    my $class = shift; 
    my $self = {@_}; 
    bless{$self, $class}; 
} 

sub count1{ 
    my ($self, $lab1) = @_; 
} 

sub new1{ 
    my ($class, $lab1) = @_; 
    my $self = {}; 
    bless $class, $self; 
} 

sub setpath{ 
    my $self = shift; 
} 

Odpowiedz

4

Po wywołaniu podprogramu przekazywane parametry są umieszczane w specjalnej tablicy @_. Można spożywać tę tablicę według wartości zmieniających się my $foo = shift lub przez bezpośrednie przypisanie tablicy my ($foo,$bar)[email protected]_; Jest nawet możliwe, aby użyć wartości bezpośrednio z tablicy: $_[0]

dlaczego jedna porównaniu z innymi? Bezpośrednie przypisanie tablic jest najbardziej standardowe i powszechne. Czasami sposób zmiany jest używany, gdy istnieją opcjonalne końcowe wartości. Zniechęca się bezpośrednie użycie macierzy, z wyjątkiem kilku małych nisz: funkcji opakowania, które wywołują inne funkcje, zwłaszcza wewnątrz obiektów. funkcje, które owijają inne funkcje i modyfikują wejścia. Również specjalna forma goto &func, która natychmiastowo upuszcza bieżący stos wywołań i wywołuje func na aktualnej wartości @_.

# use shift for optional trailing values 
use v5.10; 
my $foo = shift; 
my $bar = shift // 'default bar value'; 
my $baz = shift // 'default baz value'; 

#obj method to call related non-object function. 
sub bar { my $self = shift; _bar(@_) } 
sub longname { shortname(@_) } 
sub get { return $_[0]->$_[1]; } 
4

# 1 i # 3 są przykładami associating an object with a class (Perl zorientowany obiektowo).

W # 2, @_ jest listą parametrów przekazywanych do funkcji, więc $self i $lab1 otrzymują wartości pierwszych 2 przekazanych parametrów.

W # 4, shift() jest zbudowany w podprogramie Perl, który pobiera tablicę jako argument, a następnie zwraca i usuwa pierwszy element w tej tablicy. Jeśli nie ma argumentu, jest wykonywany niejawnie na @_. Tak więc $self otrzymuje wartość pierwszego przekazanego parametru.

Powiązane problemy