Object / Arrays
kleinerroemer
- perl
0 Alex0 kleinerroemer
0 Siechfred
Hi Leute!
Ich programmiere seit einiger Zeit mit Perl und komme ganz gut damit zurecht.
Mein Problem ist jedoch, dass ich nicht dahinter komme, wie ich ein Objekt erstelle, welches ein Array als "Membervariable" hat.
( So eine Art Stack oder Containerklasse )
Ich kann mir das einfach nicht zusammenreimen.
Denke mal das es eigentlich recht einfach sein müsste, aber naja.
Schon mal danke im voraus,
lg.
Roman
Hi Leute!
Ich programmiere seit einiger Zeit mit Perl und komme ganz gut damit zurecht.
Mein Problem ist jedoch, dass ich nicht dahinter komme, wie ich ein Objekt erstelle, welches ein Array als "Membervariable" hat.
das liegt vielleicht daran, dass perl einfacher zu verstehen ist, als man eigentlich vermutet ;)
hier ist eine kurze Anleitung zum OO-Perl [link href="http://de.selfhtml.org/perl/sprache/objekte.htm"]hier[/link]
müsste dein Thema eigentlich abdecken, oder?
Gruß, Alex
hier ist eine kurze Anleitung zum OO-Perl [link href="http://de.selfhtml.org/perl/sprache/objekte.htm"]hier[/link]
müsste dein Thema eigentlich abdecken, oder?
Naja ganz glücklich bin ich damit nicht ;).
In dem Bsp. wird ja mit der VCset Methode, eine neue Variable hinzugefügt, und benannt. Das könnte ich zwar auch mach und mir den namen mit einer internen Zählervariable ersparen, aber das finde ich nicht gerade schön.
Ich suche nache einer Lösung die "so aussieht":
sub addName
{
$this = shift;
push( @{ $this -> { array } }, shift );
}
sub getName
{
$this = shift;
return pop( @{ $this -> {array } } );
}
denke ich irgendwie umständlich oder so...?!?
lg.
Ich suche nache einer Lösung die "so aussieht":
sub addName
{
$this = shift;
push( @{ $this -> { array } }, shift );
}sub getName
{
$this = shift;
return pop( @{ $this -> {array } } );
}denke ich irgendwie umständlich oder so...?!?
Nein, das entspricht einem üblichen Objekt in Perl, nur must du noch eine "geblesste" Referenz erzeugen, so wie auf der gezeigten Seite beschrieben.
Struppi.
Nein, das entspricht einem üblichen Objekt in Perl, nur must du noch eine "geblesste" Referenz erzeugen, so wie auf der gezeigten Seite beschrieben.
»»
Ah jetzt wo ich das mit der geblessten referenz überprüft habe, hab ich einen kleinen fehler im Konstruktor gefunden. Funktioniert jetzt mit genau dem Code den ich vorher beschrieben habe.
Danke für die Hilfe
hier ist eine kurze Anleitung zum OO-Perl [link href="http://de.selfhtml.org/perl/sprache/objekte.htm"]hier[/link]
müsste dein Thema eigentlich abdecken, oder?
Naja ganz glücklich bin ich damit nicht ;).
In dem Bsp. wird ja mit der VCset Methode, eine neue Variable hinzugefügt, und benannt. Das könnte ich zwar auch mach und mir den namen mit einer internen Zählervariable ersparen, aber das finde ich nicht gerade schön.
Ich suche nache einer Lösung die "so aussieht":
sub addName
{
$this = shift;
push( @{ $this -> { array } }, shift );
}sub getName
{
$this = shift;
return pop( @{ $this -> {array } } );
}denke ich irgendwie umständlich oder so...?!?
lg.
Habe leider nicht mein Perl-Buch zur Seite.
Du suchst aber, wie die Arrays in Perl behandelt werden müssen, oder?
Du suchst aber, wie die Arrays in Perl behandelt werden müssen, oder?
Nur wie ich es im Objekt behandle!
Hat sich aber jetzt eh schon erübrigt.
Der Code von Sichfrid triffts sehr gut!
Mein Problem ist jedoch, dass ich nicht dahinter komme, wie ich ein Objekt erstelle, welches ein Array als "Membervariable" hat.
Ein Objekt ist zunächst nichts anderes als eine Hashreferenz, die mittels bless an ein Objekt gebunden wird. Lies dir hierzu bitte perlref durch, um den Aufbau zu verstehen. Mal ein simples Beispiel, das es verdeutlicht:
package MyArray;
sub new {
# Objektname
my $pkg = shift;
# Hashreferenz mit einer
# Arrayreferenz als einziges Element
my $ref = { myArray => [] };
# Binde die Referenz an den Objektnamen
return bless $ref, $pkg;
}
sub addElement {
my $obj = shift;
# hinzuzufuegendes Element
my $elm = shift;
# Element hinzufuegen
push @{$obj->{myArray}}, $elm;
}
sub getElement {
my $obj = shift;
# Indexnummer des gesuchten Elements
my $index = shift;
# Inhalt zurueckgeben oder
# undef, wenn Element nicht existiert
return $obj->{myArray}->[$index] || undef;
}
Im Einsatz:
use strict;
use diagnostics;
use MyArray;
# Objektinstanz
my $arr = MyArray->new;
# Hinzufuegen von zwei Elementen
$arr->addElement('foo');
$arr->addElement('bar');
# Ausgabe des 2. Elements
print $arr->getElement(1) || 'Kein Element';
Ich hoffe, dass es so verständlich ist, ansonsten frage nochmal nach.
Siechfred
Danke vielmals. Haut bei mir jetzt eh schon hin! nur versteh ich nach deinem bsp. das bless besser ;)
danke für das gute bsp, hats voll getroffen. Meines sieht jetzt eh "gnau so" aus.