Wiem z Perl OO Mogę mieć obiekty i dziedziczenie, ale czy są implementowane interfejsy? Jeśli tak, w jaki sposób są one egzekwowane?Czy istnieje odpowiednik Perl OO dla interfejsu?
Odpowiedz
Można utworzyć czystego wirtualnej klasy (lub roli, jeśli używasz Moose lub 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" };
Ale egzekwowanie będzie w czasie wykonywania. Ogólnie rzecz biorąc, interfejsy są potrzebne, ponieważ język nie obsługuje dziedziczenia wielokrotnego i jest ściśle wpisany. Perl obsługuje wielokrotne dziedziczenie i (używając łosia) coś takiego jak dziedziczenie wielokrotne (ale lepsze) zwane rolami i jest dynamicznie wpisywane. Ścisłe i dynamiczne pisanie sprowadza się do typowania typu "kaczka" (jeśli to szarpie() jak kaczka, spacery() jak kaczka i pływa() jak kaczka, to jest kaczka). W Perlu mówisz:
if ($some_obj->can("quack") {
$some_obj->quack;
} else {
croak "incompatible class type: ", ref $some_obj;
}
W tradycyjnym Perl OO bardzo mało jest egzekwowane. Masz opcję $ obj-> can ('methodname'), która pozwala używać typu "kaczka", ale nie ma to jak interfejs.
(Ale spojrzeć na łosie, Role tam może być to, co jesteś po.)
Ale oczywiście! Class::Interface.
Powiedziałem, że najpierw spojrzę na Moose'a. To jest fantastyczne. Potrzebne są
Tak, prawda, CPAN ma wszystko. ;-) – ijw
interfejsy ponieważ język nie obsługuje
interfejs jest pojęciem OOP. Nie są potrzebne z powodu problemów technicznych.
- 1. Czy istnieje nieglobalny odpowiednik perlbrew?
- 2. Czy istnieje odpowiednik Pythona operatora X w języku Perl?
- 3. Czy istnieje odpowiednik Heroku dla platformy ASP.NET?
- 4. Czy istnieje odpowiednik dla języka erlang?
- 5. Czy istnieje odpowiednik usług IIS dla Tomcat?
- 6. Czy istnieje odpowiednik Python dla HighLine?
- 7. Czy istnieje odpowiednik dla komputerów Mac?
- 8. Czy istnieje odpowiednik javascript. = Dla self concatenating?
- 9. Czy istnieje odpowiednik WPF dla ToolStripButton?
- 10. Czy istnieje odpowiednik MySQL dla PHP preg_replace?
- 11. Czy istnieje odpowiednik S4 dla opcji unlist()?
- 12. Czy istnieje odpowiednik dplyr dla data.table :: rleid?
- 13. Czy istnieje odpowiednik getBoundingClientRect() dla węzłów tekstowych?
- 14. Czy istnieje odpowiednik css dla "align =" center ""?
- 15. Czy istnieje odpowiednik HLinta dla Erlanga?
- 16. Czy istnieje odpowiednik jsFiddle dla ASP.NET/VB?
- 17. Czy istnieje odpowiednik sprintf dla node.js
- 18. Czy istnieje odpowiednik numpy.delete() dla macierzy rzadkich?
- 19. Czy istnieje odpowiednik Javascriptu dla Rubiego andand?
- 20. Czy istnieje odpowiednik GAC dla .NET Core?
- 21. Czy istnieje odpowiednik Javy dla LINQ?
- 22. Czy istnieje odpowiednik pagepeed dla Nginx?
- 23. Czy istnieje odpowiednik ClientScriptManager.RegisterClientScriptInclude dla CSS
- 24. Czy istnieje odpowiednik Jacka dla nodejów?
- 25. Czy istnieje odpowiednik javascript()?
- 26. Python odpowiednik perl -pe?
- 27. Czy Perl 6 ma odpowiednik dir() Pythona?
- 28. Czy istnieje odpowiednik "... || die" w grze powershell?
- 29. Czy istnieje binarny odpowiednik System.Text.StringBuilder?
- 30. Czy istnieje odpowiednik klasy Semantic dla klasy Bootstrap .container?
+1 dla łosia z rolami. Zwłaszcza jeśli pochodzisz ze ściśle określonego tła/preferencji OO, robi to, co lubisz. –
http://stackoverflow.com/questions/1341903/c-like-usage-of-moose-with-perl-for-oop – draegtun