Qual è la differenza tra pacchetto, modulo e classe in Perl orientato agli oggetti?Qual è la differenza tra pacchetto, modulo e classe in Perl orientato agli oggetti?
risposta
I moduli sono un singolo file, un .pm file che fornisce il codice. Questo potrebbe essere nessun pacchetto, un singolo pacchetto o più di un pacchetto. A un modulo non interessa molto ciò che è contenuto, quindi può essere un codice che si inserisce nello stesso spazio dei nomi, un insieme più tradizionale di subroutine in una libreria o definisce l'idea di Perl di una classe.
Un pacchetto, noto anche come spazio dei nomi, contiene le proprie variabili e subroutine. È un modo per separare diverse parti del tuo programma. È possibile creare il pacchetto e mettere il codice in esso:
package SomePackage;
sub some_subroutine { ... } # really SomePackage::some_subroutine
Si carica il modulo per ottenere l'accesso al pacchetto:
use SomePackage; # read and compile the module file
SomePackage::some_subroutine(...);
classe A Perl è un pacchetto e il suo comportamento associato. I metodi in una classe sono sottoprogrammi solo normali, anche quando trattiamo subroutine come metodi, il primo parametro è la cosa (nome di un pacchetto o di un oggetto, noto anche come referente) che ha chiamato metodo:
package SomeClass;
sub class_method { my($class, @args) = @_; ... }
sub instance_method { my($self, @args) = @_; ... }
Da la classe è solo un pacchetto di come qualsiasi altro pacchetto, e probabilmente vive in un modulo, si accede allo stesso modo con use
:
use SomeClass;
my $i = SomeClass->class_method(...);
la sintassi OO freccia fa alcune cose speciale per lasciare che la subroutine some_method
sapere che è essere chiamato come metodo Perl mette il referente (lo SomeClass
in questo caso) come primo argomento. Inoltre, quando si utilizza la sintassi OO, Perl sa usare le sue caratteristiche di ereditarietà.
metodi chiamati con '->' ottenere il referente come primo parametro al metodo, in modo da questa chiamata:
SomeClass->new('world');
è sintatticamente il se si fosse chiamato con il nome della classe come primo parametro:
SomeClass::new('SomeClass' ,'world'); # no inheritance this way
Funziona allo stesso modo anche per gli oggetti. Quando un oggetto è il referente:
my $i = SomeClass->new();
$i->bar('world');
l'oggetto è il primo parametro come metodo:
SomeClass::bar($i, 'world');
Questo è un modo abbastanza approssimativo per dire che Perl <6 non ha classi ;-) – innaM
Anche se, detto questo, mi piace * come * quel comportamento. Soprattutto, ho avuto un po 'di difficoltà da PHP per ottenere questo modo di pensare, voglio dire, non ha (e non avrà mai, (* inserisce le dita nell'orecchio *)) supporto di namespace funzionante. –
I pacchetti non sono ambiti. Hanno un ambito lessicale, ma non definiscono un ambito. –
Perl non ha classi. Dispone di spazi dei nomi modificati con package
. Per i dettagli completi di Perl OOP, vedere Perl intermedio o Perl orientato agli oggetti. È inoltre possibile visualizzare la documentazione perltoot e perlboot. In breve, Perl simula ciò che le persone si aspettano che le classi "reali" siano con pacchetti, subroutine normali e riferimenti.
Un modulo è un pezzo di codice distribuibile contenuto in un file. Vedi perlmod.
dico di più su questo nel mio post per The Effective Perler, Find a module's release managers. Non entrerò nel materiale OO, ma parlo degli altri termini relativi al "modulo".
- 1. Qual è la differenza tra un linguaggio orientato ai componenti e orientato agli oggetti?
- 2. Qual è la differenza tra "pacchetto" e "modulo" in Frege?
- 3. MongoDB è orientato agli oggetti?
- 4. Reactjs - Orientato agli oggetti?
- 5. Qual è la differenza tra oggetti e classi in C#?
- 6. Qual è la differenza tra modulo e distribuzione su CPAN?
- 7. qual è la differenza tra @ e @@ in un modulo?
- 8. Qual è la differenza tra BAREWORD e * BAREWORD in Perl?
- 9. Qual è la differenza tra open e sysopen in Perl?
- 10. Qual è la differenza tra 'eq' e '= ~' in Perl?
- 11. In Perl, qual è la differenza tra un file .pm (Perl module) e .pl (Perl script)?
- 12. È orientato agli oggetti di Erlang?
- 13. Esperimento: C orientato agli oggetti?
- 14. Python è diventato più orientato agli oggetti?
- 15. Qual è la differenza tra classi e istanze di oggetti?
- 16. Approccio orientato agli oggetti con AngularJS
- 17. Perl Tkx, qual è la differenza tra "pulsante" e "ttk__button"?
- 18. Qual è la differenza tra un pacchetto e un intento?
- 19. utilizzando jQuery in modo orientato agli oggetti
- 20. In che modo Ruby è completamente orientato agli oggetti?
- 21. Qual è la differenza tra l'installazione di un modulo perl e la copia dell'intera cartella?
- 22. Qual è la differenza tra un pacchetto dll e nuget?
- 23. Domande multiple con Bokeh orientato agli oggetti
- 24. Qual è la differenza tra modulo, pacchetto e libreria in Haskell?
- 25. Qual è la differenza tra database basati su grafici e database orientati agli oggetti?
- 26. Differenza tra $ @ e $! in perl
- 27. Qual è la differenza tra una chiusura e un modulo?
- 28. Clojure è orientato agli oggetti al centro? (Polymorphism in seqs)
- 29. Creare un oggetto callback in stile C orientato agli oggetti?
- 30. Ruby è davvero un linguaggio completamente orientato agli oggetti?
Prima di chiedere questo tipo di domande, provare prima a leggere la documentazione di Perl. Se non capisci cosa stai leggendo, fai domande al riguardo. –
Cosa ti rende così sicuro che non aveva RTFM? – spoulson
@spoulson: guarda la sua storia di domande. Questo non è un one-off. –