SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Forside   Tilmelding   Postarkiv   Forum   Kalender   Søg
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

Re: [PERL] Array i klasse



Peter Makholm wrote:
Jan Eggert Kofoed <sslug@sslug> writes:

Jeg ville nok give mulighed for at initialiserer objektet i din
new-funktion.
Jeg er ved at parse en XML fil, og udfylder objektet efterhånden som jeg kommer til de relevante tags.



sub new
{
    my $self = shift;


Bemærk at $self bliver sat til navnet på klassen. Kald den $class i
stedet.


    my @_Groups;
    my $r_Album =


Rent stilistisk ville jeg nok kalde $r_Album for $this eller
$self. Det er selve objektet du opretter her som du i alle de andre
metoder kalder $this eller $self.

Hvorvidt man bruger $this eller $self er underordnet, man bør bare
være konsistent.

Thanx, det er jo rigtigt.


    {
	"_name"        => undef,
	"_id"          => undef,
	"_dbname"      => undef,
	"_released"    => undef,
	"_albumartist" => undef,
	"_groups"      => sslug@sslug
    };


Jeg ville nok skrive 'groups => []'. Der er ikke nogen grund til at
introducerer navnet @_Groups som du alligevel ikke kan bruge senere.

Anvendes nu; det er meget pænere.


bless $r_Album, 'Album';


og så endelig 'bless $slef, $class' som andre også foreslår.

Yes!


    return $r_Album;
} # constructor


Rent stilistisk plejer jeg ikke at skrive den sidste
return-sætning. Perl returnerer automatisk resultatet af den sidste
sætning.

Det er et smagsspørgsmål om man kan lide det eller ej. Der er nogle
der insisterer meget fast på at alle funktioner skalafsluttes med
return.

Man kan ikke diskutere smag, men jeg synes også, at subroutinens sidste udtryk er OK som returværdi.


sub albumartist
{


Jeg fatter stadigvæk ikke hvad pointen med denne funktion er.

Den lægger den første gruppe på albummet ind i $class->{groups}->[0].
I $class->{groups}->[$t] lægges gruppen, der udfører nummeret på track $t på albummet.



Jeg benyttede en notation fra en bog, hvor det anvendes som en
konvention, der viser, at vi har med private data at gøre.
Men er alle klassens data ikke det?


Jo. Det er også privat hvorvidt du implementerer dit objekt som en
arrayref eller en scalarref.


Jeg har set eksempler, hvor der anvendes lutter store bogstaver, og
der er også kommentarer om anvendelse af blanding af store og små
bogstaver i forhold til konventioner i Perl's egen kode.


'perldoc perlstyle' giver en række stilistiske råd. Den skriver ikke
decideret noget om objekter, men skriver som noget af det sidste om
store og små bogstaver.

Fint, den læser jeg nu.

Må jeg lige igen spørge til, hvordan jeg kan bestemme størrelsen af arrayet $class->{groups}.

Jeg har prøvet at indsætte en stump kode for at benytte en simpel reference til et array, hvor jeg kan, det jeg vil, men jeg kan ikke oversætte det til objekt-notationen.
------------------------------------
Album.pm
--------
sub new
{
my $class = shift;


    my $this =
    {
	"name"        => undef,
	"id"          => undef,
	"dbname"      => undef,
	"released"    => undef,
	"groups"      => []
    };

    bless $this, $class;
} # constructor

mymusic.pl
----------
    my @anArray;
    my $rArray = sslug@sslug;
    $anArray[4] = 3;

print FH "element four of rArray: ".$$rArray[4]."\n";
print FH "element zero of groups: " .$album->{groups}->[0]->name()."\n";
print FH "size of rArray: ".scalar(@$rArray)."\n";
print FH "size of groups: ".scalar($album->{groups})."\n";


FH
--
element four of rArray: 3
element zero of groups: Canned Heat
size of rArray: 5
size of groups: ARRAY(0xbf655c)
------------------------------------

Når jeg skal udskrive et element i et array ved anvendelse af referencen skal jeg jo skrive '$$', og når jeg skal benytte referencen som et array (i scalar), skal jeg skrive '@$'.
Jeg kan ikke på samme måde skifte første '$' ud med '@', når jeg arbejder med objektet.
Hvordan får jeg størrelsen på arrayet $class->{groups}?


mvh
Jan



 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

 
 
Henvendelse vedrørende websiderne til <www_admin>. Senest ændret 2005-08-10, klokken 19:54
Denne side vedligeholdes af MHonArc .