Schrift
[thread]7181[/thread]

Konstruktor



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
steffenw
 2005-08-02 12:16
#56914 #56914
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was ist eigentlich der Unterschied zwischen
Code: (dl )
my $obj = new Class @Parameter;

und
Code: (dl )
my $obj = Class->new(@Parameter);

Ich habe mal die Parameter im Package angeschaut, als erstes kommt 'Class' und danach die @Parameter, ist bei beiden Aufrufen das gleiche.
$SIG{USER} = sub {love 'Perl' or die};
esskar
 2005-08-02 12:21
#56915 #56915
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es gibt keinen!
Crian
 2005-08-02 12:56
#56916 #56916
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich denke, das ist ein Fall von TIMTOWDI. Es gibt Fälle, da finde ich die indirekte Schreibweise schöner. Zum Beispiel in Tk-Programmen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Taulmarill
 2005-08-02 13:01
#56917 #56917
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
es wird auch eh direkt von parser umgebaut.
Code: (dl )
1
2
3
peters@ronin:~> perl -MO=Deparse -e'my $obj = new Class @Parameter;'
my $obj = 'Class'->new(@Parameter);
-e syntax OK

der interpreter sieht also in beiden fällen das selbe.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
ptk
 2005-08-02 13:07
#56918 #56918
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Die Schreibweise mit dem Pfeil soll etwas sicherer sein. Bein der "indirekt syntax" kann es vorkommen, dass Perl falsch raet.
steffenw
 2005-08-02 13:11
#56919 #56919
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
... das mit dem ref in
Code: (dl )
return bless {}, ref($_[0]) || $_[0];
ist also was anderes.\n\n

<!--EDIT|steffenw|1122973915-->
$SIG{USER} = sub {love 'Perl' or die};
Taulmarill
 2005-08-02 13:19
#56920 #56920
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
jap, das kommt vor allen dingen dann vor, wenn der funktionsname der klasse mit dem namen einer perfunktion oder eines operators übereinstimmt. Class->print; würde sich also z.b. anders verhalten als print Class.
man sollte auch darauf achten, keine unintuitiven konstrukte zu bauen. my $obj = foo bar baz bat; z.b. compiliert und funktioniert (solange bar->foo und bat->baz vorhanden sind) allerdings kann das den einen oder anderen doch mal schnell verwirren.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Taulmarill
 2005-08-02 13:22
#56921 #56921
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
[quote=steffenw,02.08.2005, 11:11]... das mit dem ref in
Code: (dl )
return bless {}, ref($_[0]) || $_[0];
ist also was anderes.[/quote]
das ist eine "abkürzung" für einen üblichen konstruktor. wobei die sache mit dem ref depreciated ist. eine etwas ausführlichere version ist:
Code: (dl )
1
2
3
4
5
6
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
[E|B]
 2005-08-02 13:37
#56922 #56922
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=ptk,02.08.2005, 11:07]Die Schreibweise mit dem Pfeil soll etwas sicherer sein. Bein der "indirekt syntax" kann es vorkommen, dass Perl falsch raet.[/quote]
Wie kann Perl raten?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Taulmarill
 2005-08-02 13:57
#56923 #56923
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
[E|B
,02.08.2005, 11:37][quote=ptk,02.08.2005, 11:07]Die Schreibweise mit dem Pfeil soll etwas sicherer sein. Bein der "indirekt syntax" kann es vorkommen, dass Perl falsch raet.

Wie kann Perl raten?[/quote]
perl errät alles mögliche, würde es das nicht tun, hätte man eine viel striktere syntax. im prinzip wurden einfach nach den erfahrungen der programmierer einige leitlinien eingebaut, anhand derer perl konstrukte interpretiert, die andere interpreter/compiler gar nicht mehr verarbeiten würden. man hofft dabei, das zu tun, was der user will.
allerdings ist das alles wohldefiniert, einen pseudozufall (wie man es bei dem begriff "raten" evtl vermuten würde) gibt es dabei nicht.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2005-08-02 12:16.