So con OO Perl Posso avere oggetti ed ereditarietà, ma le interfacce sono implementate? Se sì, come vengono applicati?Esiste un OO Perl equivalente a un'interfaccia?
risposta
È possibile creare una classe virtuale pura (o un ruolo se si utilizza Moose o MooseX::Declare):
package Foo;
use strict;
use Carp;
sub new { croak "new not implemented" };
sub do_x { croak "do_x not implemented" };
sub do_y { croak "do_y not implemented" };
Ma l'esecuzione sarà in fase di esecuzione. In generale, le interfacce sono necessarie perché la lingua non supporta l'ereditarietà multipla ed è tipizzata in modo rigoroso. Perl supporta l'ereditarietà multipla e (usando Moose) qualcosa come l'ereditarietà multipla (ma meglio) chiamata ruoli ed è digitato dinamicamente. La tipizzazione rigorosa vs dinamica si riduce alla digitazione (se cessa() come anatra, cammina() come un'anatra e nuota() come un'anatra, quindi è un'anatra). In Perl, tu dici:
if ($some_obj->can("quack") {
$some_obj->quack;
} else {
croak "incompatible class type: ", ref $some_obj;
}
Nel Perl OO tradizionale, viene applicato molto poco. Hai l'opzione di $ obj-> can ('methodname') per anatra-digita quello che stai usando, ma non c'è niente come un'interfaccia.
(Ma dare un'occhiata a Moose, i ruoli ci può essere quello che stai dopo.)
Ma certo! Class::Interface.
Detto questo, guarderei prima Moose. È fantastico.
Sì, giusto, CPAN ha tutto. ;-) – ijw
interfacce sono necessari perché la lingua non supporta
Interface è un concetto OOP. Non sono necessari a causa di un problema tecnico.
- 1. Esiste un Perl equivalente a `if __name__ == '__main __'` di Python?
- 2. Esiste un equivalente Node.js di Perl WWW :: Mechanize?
- 3. Esiste un Perl equivalente all'operatore null coalescente (??) in C#?
- 4. Esiste un equivalente C per il modulo Carpa di Perl?
- 5. Esiste un python equivalente all'avvio di modulo di perl?
- 6. Esiste un equivalente Python dell'operatore x di Perl?
- 7. Esiste un equivalente a "continua" in Parallel.ForEach?
- 8. Esiste un css equivalente a "align =" center ""?
- 9. Esiste un valore .Net equivalente a java.util.concurrent.Executor?
- 10. Esiste un equivalente C# a IsDebuggerPresent()?
- 11. Esiste un PHP equivalente a Compass?
- 12. Esiste un vim equivalente a '! $' Di bash?
- 13. Esiste un dplyr equivalente a data.table :: rleid?
- 14. Esiste un Python equivalente a HighLine?
- 15. Esiste un tag XML equivalente a `ListView.addHeaderView '?
- 16. Esiste un equivalente a memcpy() in Java?
- 17. Esiste un equivalente a SuppressWarnings in Scala?
- 18. Esiste un WPF equivalente a System.Windows.Forms.Screen?
- 19. Esiste un equivalente a `cabal-dev ghc`
- 20. Esiste un S4 equivalente a unlist()?
- 21. C# equivalente di perl $ _
- 22. python equivalente a QW di perl()
- 23. Perl equivalente di Ruby's `reject!`?
- 24. Python equivalente di Perl/Rubino || =
- 25. Esiste un RRDTool .net equivalente
- 26. Esiste un metodo equivalente LINQ?
- 27. Equivalente Java dell'operatore /// di Perl?
- 28. Esiste un C++ equivalente a BigDecimal di Java?
- 29. Esiste un equivalente in C# a `reply_to? 'Di Ruby?
- 30. Esiste un Bazaar equivalente a `git commit --amend`?
+1 per alci con ruoli. Soprattutto se provi da una rigida OO/preferenza, fa quello che ti piace. –
http://stackoverflow.com/questions/1341903/c-like-usage-of-moose-with-perl-for-oop – draegtun