Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7396[/thread]

Hash als Klasseneigenschaft



<< >> 8 Einträge, 1 Seite
Gast Gast
 2005-10-25 20:16
#59298 #59298
Ich möchte einen Hash als Teil der Eigenschaften meiner Klasse unterbringen, wie greife ich jetzt darauf zu?
Ronnie
 2005-10-25 20:45
#59299 #59299
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

package Class;

my %class_hash;

sub new {
my $class = shift;
my $value = shift || 'default';
my $self = { value => $value };
bless $self, $class;
return $self;
}

sub set_class_hash {
my $self = shift;
my ($k, $v) = @_;
$class_hash{$k} = $v;
}

sub get_class_hash {
my $self = shift;
my $k = shift;
return $class_hash{$k};
}

package main;

my $obj1 = new Class('one');
$obj1->set_class_hash('color', 'red');
print Dumper $obj1;

my $obj2 = new Class('two');
print $obj2->get_class_hash('color'), "\n";
print Dumper $obj2;
\n\n

<!--EDIT|Ronnie|1130258864-->
Taulmarill
 2005-10-26 12:21
#59300 #59300
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
was spricht dagegen, einen weiteren hash unter $self anzulegen. das währe auf jeden fall wesendlich weniger arbeit, und man könnte den hash wie einen hash benutzen, ohne hashes noch einmal neu implementieren zu müssen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
renee
 2005-10-26 12:56
#59301 #59301
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Weil es dann ein Hash des Objekts waere und nicht der Klasse...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Ronnie
 2005-10-26 13:01
#59302 #59302
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=Taulmarill,26.10.2005, 10:21]was spricht dagegen, einen weiteren hash unter $self anzulegen. das währe auf jeden fall wesendlich weniger arbeit, und man könnte den hash wie einen hash benutzen, ohne hashes noch einmal neu implementieren zu müssen.[/quote]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

package Class;

my %class_hash;

sub new {
my $class = shift;
my $value = shift || 'default';
my $self = { value => $value , class_wide => \%class_hash, };
bless $self, $class;
return $self;
}

package main;

my $obj1 = new Class('one');
$obj1->{class_wide}->{color} = 'red';
print Dumper $obj1;

my $obj2 = new Class('two');
print Dumper $obj2;

Wenn man den Zugriff NICHT über Methoden haben will, ist das eine weitere Möglichkeit (auch wenn es dem Kapselungsgedanken widerspricht).
Taulmarill
 2005-10-26 13:39
#59303 #59303
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
imho sollte man sich, wenn man einfach nur einen hash haben will, nicht die arbeit machen, diesen noch einmal neu zu implementieren, nur um eine kapselung zu erreichen. ich benutz gerne hashes auch als solche. kapseln macht in dem moment sinn, wo ich den hash nicht als solchen benutzen will, sondern von aussen nur methoden haben will, die dann wiederum intern den hash zur datenspeicherung benutzen.
achja, ich kenn ja das eigendliche vorhaben nicht, aber man sollte sich zwei mal überlegen variablen, die keine konstanten sind, in die klasse und nicht in das objekt zu implementieren. dann wird es nämlich unmöglich zwei objekte mit unterschiedlichen variablenwerten zu haben. so etwas erwarte ich normalerweise nicht von modulen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Ronnie
 2005-10-26 13:47
#59304 #59304
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Wenn ich ehrlich bin verstehe ich dich nicht ganz - du unterscheidest irgendwie nicht zwischen Klassen- und Instanzvariablen?! Hast du das letzte Snippet mal ausprobiert?!
renee
 2005-10-26 16:14
#59305 #59305
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Taulmarill: Manchmal braucht man aber Werte die fuer die gesamte Klasse gelten. Dann ist soetwas durchaus sinnvoll!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 8 Einträge, 1 Seite



View all threads created 2005-10-25 20:16.