Sé con OO Perl Puedo tener objetos y herencia, pero ¿están implementadas las interfaces? Si es así, ¿cómo se hacen cumplir?¿Hay un OO Perl equivalente a una interfaz?
Respuesta
Puede crear una clase virtual pura (o papel si está utilizando o MooseMooseX::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" };
Pero la ejecución será en tiempo de ejecución. En general, las interfaces son necesarias porque el lenguaje no admite herencia múltiple y está estrictamente tipado. Perl admite herencia múltiple y (usando Moose) algo así como herencia múltiple (pero mejor) llamados roles y se escribe de forma dinámica. La tipificación estricta vs dinámica se reduce a pato escribir (si grazna() como pato, camina() como un pato, y nada() como un pato, entonces es un pato). En Perl, usted dice:
if ($some_obj->can("quack") {
$some_obj->quack;
} else {
croak "incompatible class type: ", ref $some_obj;
}
En Perl OO tradicional, se aplica muy poco. Usted tiene la opción de $ obj-> can ('methodname') para pato-escribir lo que está usando, pero no hay nada como una interfaz.
(Pero echar un vistazo a los alces, los Roles en no puede ser lo que está buscando.)
¡Pero por supuesto! Class::Interface.
Dicho esto, primero miro a Moose. Es fantástico.
Sí, claro, CPAN tiene todo. ;-) – ijw
las interfaces son necesarios porque el idioma no es compatible con
interfaz de programación orientada a objetos es un concepto. No son necesarios debido a un problema técnico.
- 1. ¿Hay algo equivalente a Sonar para Perl?
- 2. ¿Hay un Python equivalente a `perl -pi -e`?
- 3. ¿Hay un Python equivalente a Data :: Dumper de Perl?
- 4. ¿Hay un equivalente PHP de WWW :: Mechanize de Perl?
- 5. ¿Es un módulo Ruby equivalente a una interfaz Java?
- 6. ¿Hay un python equivalente al módulo arrancador de perl?
- 7. ¿Hay un equivalente Python del operador x de Perl?
- 8. ¿Hay un equivalente a HLint para Erlang?
- 9. ¿Hay un Java equivalente a libevent?
- 10. ¿Hay un css equivalente a 'align = "center"'?
- 11. ¿Hay un C++ equivalente a getcwd?
- 12. ¿Hay un equivalente a Groovy en C#?
- 13. ¿Hay un WPF equivalente a System.Windows.Forms.Screen?
- 14. ¿Hay un equivalente a php.net para JavaScript?
- 15. ¿Hay un Java equivalente a MISRA C?
- 16. ¿Hay un equivalente a SuppressWarnings en Scala?
- 17. pitón equivalente a qw de Perl()
- 18. Perl equivalente a PHP bucle foreach
- 19. ¿Hay un entero equivalente a __toString()
- 20. OO mejor práctica con respecto a la devolución de una interfaz menos específica al devolver una interfaz
- 21. ¿Hay un C# equivalente a IsDebuggerPresent()?
- 22. ¿Hay un equivalente a typedef en C#?
- 23. ¿Hay un equivalente a DBus en OSX?
- 24. ¿Hay un equivalente a memcpy() en Java?
- 25. ¿Hay un equivalente a String.Split que devuelve una lista genérica?
- 26. ¿Hay un LINQPad equivalente a una clase DataContext?
- 27. ¿Hay un Perl portátil?
- 28. Perl equivalente a escapeshellarg de PHP
- 29. ¿Hay equivalente `int, short, long` en Perl? sistema de
- 30. ¿Chicken Scheme tiene un equivalente a los $ 0 de Perl?
+1 para Moose with Roles. Especialmente si vienes de un fondo/preferencia estricto de OO, hace lo que te gusta. –
http://stackoverflow.com/questions/1341903/c-like-usage-of-moose-with-perl-for-oop – draegtun