Ho trovato questa linea molte volte nei moduli perl, ma non sono riuscito a capire cosa significasse esattamente.
my ($self, %myInputs) = @_;
Gentilmente mi spiegano l'istruzione in modo che io possa procedere.
Ho trovato questa linea molte volte nei moduli perl, ma non sono riuscito a capire cosa significasse esattamente.
my ($self, %myInputs) = @_;
Gentilmente mi spiegano l'istruzione in modo che io possa procedere.
Suppongo che sia una delle prime linee in una funzione del metodo di classe . Quella linea analizza @_
che è la list of the function arguements, e estrae il primo parametro che è sempre un riferimento all'oggetto in $self
ed estrae il resto di loro in un hash%myInputs
. Questo naturalmente presuppone che la funzione viene chiamata con i arguements in formato hash, come nel seguito funzione Perl/Tk
$mw->Button(-text => "RIGHT", -command => sub { exit })
->pack(-side => 'right', -fill => 'both');
mia ($ sé,% myInputs) = @_;
Non tutte le funzioni ricevono il primo argomento $self
. Di fatto, per convenzione, solo quelli richiamati usando l'operatore della freccia fanno ->
; il richiamo con ->
invia implicitamente un argomento speciale che si riferisce all'oggetto. Tutte le funzioni e i metodi in Perl sono dichiarati allo stesso modo (utilizzando la parola chiave sub
). Solo l'invocazione determina se la funzione è o meno un metodo.
Il my ($foo, $bar) = ($x, $y);
è chiamato assegnazione parallela. Questo è tutto ciò che sta succedendo qui!
Osservare che un hash può essere inizializzato da una matrice in Perl.
my @foo = qw/ foo bar baz quz /;
my %hash = @foo;
print $hash{foo}; # outputs bar
Perché si sta assegnando l'hash %myInputs
, l'hash viene assegnato in modo esplicito tutti gli ingressi che non il implicitamente inviato (perché si sta tirando fuori che uno in $self
) sono. Ma attenzione, non avrebbe molto senso fare quanto segue, giusto?
my @foo = qw/ foo bar baz /;
my %hash = @foo;
print $hash{baz} # what is this set too??
Per lo stesso motivo, anche non ha molto senso per richiamare la funzione con una quantità non-ancora di argomenti! Entrambi genereranno un avvertimento.
In Perl @_;
è un array globale delle variabili speciali
Simile come @ARGV
L'array contiene gli argomenti della riga di comando destinati per lo script.
Quindi, in my ($self, %myInputs) = @_;
@_
rappresenterebbe l'argomento della variabile $
nell'hash-variabili %
Ma qual è la necessità di utilizzare $ sé! Mi confonde così tanto! – user1855888
@ user1855888 '$ self' si riferisce all'oggetto che stai chiamando. Se chiami 'my $ a Animal-> new', e poi chiami' $ a-> run' quindi '$ self' (primo argomento) all'interno di' sub run {} 'verrebbe impostato su' $ a'. In altre lingue lo chiamate 'this'. Puoi chiamarlo '$ this' anche in Perl se sei abituato a questo,' my $ this = shift' (sebbene sia contro la convenzione). –