Dit is het commando PDL::Objectsp dat kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
PDL::Objects -- Objectoriëntatie, wat is het en hoe kan het worden gebruikt
PRODUCTBESCHRIJVING
Dit moet nog goed geschreven worden. [Is er ook een goede reden waarom we het niet aanbevelen?
extra objectgegevens opslaan in de header-hash?]
Erfenis
Er zijn in principe twee redenen om piddles te subclasseren. De eerste is gewoon dat jij
je eigen routines wilt kunnen gebruiken zoals
$piddle->iets()
maar wil de PDL-naamruimte niet verknoeien (inderdaad een waardig doel!). De andere is dat
u een speciale afhandeling van sommige functies of meer informatie over de gegevens wilt geven
de plas bevat. In het eerste geval kun je ermee doen
pakket BAR;
@ISA=qw/PDL/;
sub foo {mijn($dit) = @_; viool;}
pakket belangrijkste;
$a = PDL::pdl(BAR,5);
$a->foo();
Omdat een PDL-object echter een ondoorzichtige verwijzing naar een C-structuur is, is dit niet mogelijk
de PDL-klasse uitbreiden met bijvoorbeeld extra gegevens via subklassen. Om dit probleem te omzeilen
PerlDL heeft ingebouwde ondersteuning om de PDL-klasse uit te breiden via de heeft een relatie voor gezegend
hasj. U kunt de HEEFT EEN gedraag zoals IS EEN simpelweg doordat u het object "PDL" toewijst
toe aan het attribuut met de naam PDL en herdefinieer de methode initialiseren().
pakket FOO;
@FOO::ISA = qw(PDL);
sub initialiseren {
mijn $class = shift;
mijn $zelf = {
creation_time => time(), # benodigde extensie :-)
PDL => null, # gebruikt om PDL-object op te slaan
};
zegen $zelf, $klasse;
}
Alle PDL-constructeurs bellen initialiseren() om ervoor te zorgen dat uw extensies worden toegevoegd door
allen PDL-constructeurs automatisch. Het "PDL" attribuut wordt door perlDL gebruikt om de
PDL-object en alle PDL-methoden gebruiken dit kenmerk automatisch als ze worden aangeroepen met een
gezegende hash-referentie in plaats van een PDL-object (een gezegend scalair).
Onthoud dat als u een klasse subklasseert die is subklasse van een piddle, u dit moet doen
bel SUPER::initialiseren.
NODIG DINGEN OVER CODE REFs!!
Voorbeelden
U kunt enkele eenvoudige voorbeelden van PDL-subklassen vinden in de PDL-distributietestcase
bestanden. Kijk in "t/subclass2.t", "t/subclass3.t", enz.
uitgang Automatische creatie en Subklasse Objecten
Voor PDL-functies waarbij de uitvoer wordt gemaakt en geretourneerd, roept PDL ofwel de
de methode "initialiseren" of "kopiëren" van het subklasse-object om het uitvoerobject te maken. (Zien
PDL::Indexing voor een discussie over het automatisch maken van uitvoer.) Dit gedrag wordt samengevat als
volgt:
·
Voor Eenvoudig functies, gedefinieerd als het hebben van een handtekening van
func( a(), [o]b() )
PDL roept $a->copy aan om het uitvoerobject te maken.
In de geest van de Perl-filosofie van het maken Eenvoudig Things Eenvoudig, Dit gedrag maakt het mogelijk
PDL-subklasse objecten kunnen worden geschreven zonder de vele eenvoudige PDL te overbelasten
functies in deze categorie.
Het bestand t/subclass4.t in de PDL Distribution test op dit gedrag. Zie dat bestand
bijvoorbeeld.
·
Voor andere functies roept PDL $class->initialize aan om het uitvoerobject te maken. Waar
$class is de klassenaam van het eerste argument dat aan de functie wordt geleverd.
Voor deze meer complexe gevallen is het moeilijk om de subklasse-objecten te raden
ontwerper om te weten of een "kopie" of een "initialisatie" gepast is. Dus voor deze gevallen
$class->initialize wordt standaard aangeroepen. Als dit niet geschikt voor u is, overbelast dan de
functie in uw subklasse en doe wat geschikt is, is de overbelaste functie
code.
Gebruik PDL::Objectsp online met behulp van onworks.net-services