Schrift
[thread]7680[/thread]

overload

Leser: 1


<< >> 7 Einträge, 1 Seite
esskar
 2006-02-07 13:35
#62662 #62662
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hi.
wie das mit dem use overload funktioniert, hab ich jetzt verstanden.
Ich kann sowas machen:

Code: (dl )
1
2
my $c1 = $v1 - $x1 + $x2 + $x3 - $x4;
my $c2 = $c1 * $v1;


'x' steht hier für einen Wert, 'v' für eine Variable - und beide sind selbst implementierte objekte.
Wenn ich $c1 und $c2 ausgeben lasse, bekomm' ich (z.B.) folgende Expressions.

Code: (dl )
1
2
a - 10 + 20 + 30 - 40      # $c1
a - 10 + 20 + 30 - 40 * a  # $c2


jetzt würde ich gerne folgendes machen können.

Code: (dl )
my $c3 = ( $x1 + $x2 ) * $v1;


und dafür gerne folgendes bekommen

Code: (dl )
( 10 + 20 ) * a   # $c3


kann ich ( und ) irgendwie overloaded? oder wie bekomm ich das sonst mit ?
Crian
 2006-02-07 14:06
#62663 #62663
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
An der Bedeutung von '*' solltest du nochmal was ändern... sieht aus, als würde das im Moment alles nur aneinandergehängt?

Zum Überladen der Klammern weiß ich leider nichts.

Edit: Google (perl overload bracket) brachte zu Tage:

Code: (dl )
1
2
3
4
use overload '<>' => sub {
my $io = *{$_[0]}{IO} || $_[0];
<$io>;
};


Vielleicht geht das analog auch mit runden Klammern?\n\n

<!--EDIT|Crian|1139314176-->
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
 2006-02-07 14:10
#62664 #62664
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
afaik sind klammern keine operatoren und können daher auch nicht überladen werden.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2006-02-07 14:37
#62665 #62665
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Stimmt, laut Kamelbuch S. 364 sind keine Klammern in der Liste der überladbaren Operatoren.
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
esskar
 2006-02-07 14:58
#62666 #62666
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
dann eben die frage, gibt es sowas schon als modul, also ein modul dass schon '+', '-', ... overloaded ?
esskar
 2006-02-07 15:04
#62667 #62667
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ah, jetzt check ich es.

wenn ich z.B. folgendes sag:
Code: (dl )
my $c1 = $v1 - ( $x1 + $x2 + $x3 )  * $x4;


bekomm ich ( $x1 + $x2 + $x3 ) zuerst.
esskar
 2006-02-07 18:16
#62668 #62668
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
<< >> 7 Einträge, 1 Seite



View all threads created 2006-02-07 13:35.