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