Thread eq Operator überlagern
(24 answers)
Opened by rosti at 2024-08-22 14:48
Das
![]() ![]() Dein Code wendet das Pragma im Namespace main an, das ist schon ziemlich schräg. Aber selbst das geht, weil man Objekte auch in den Namespace main taufen kann. Also machen wir das mal mit dem Code. Code (perl): (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 use 5.026; use Test::More tests => 3; use overload "==" => \&my_compare; sub my_compare { my ($left, $right) = @_; if (ref $left eq ref $right) { return $$left eq $$right; } elsif (! ref $right) { return $$left eq $right; } } sub comparable { my $name = shift; bless \$name; } my $name = comparable "Erwin"; my $hugo = comparable "Hugo"; ok($name == "Erwin", "Name ist Erwin"); ok("Erwin" == $name, "Name ist Erwin, auch andersrum"); ok(not ($name == $hugo), "Name ist nicht Hugo"); Hier sieht man, dass die Objekte sowohl mit anderen Objekten der gleichen Klasse als auch mit einfachen Strings verglichen werden können. Mit overload kann man aber nicht ändern, was Perl mit Basis-Datentypen (Zahlen und Zeichenketten) macht. Und es wird etwas verwirrender, wenn man Objekte verschiedener Klassen miteinander verarbeiten will. |