2018-11-06T13:04:31 lichtkindim Perl - Umfeld sagen wir aber Role dazu weil es auch das Perl 6 schlüsselwort dafür ist (und damit auch in Moose)
2018-11-07T08:39:01 rostiDas Problem ist nämlich, daß früher oder später der Zeitpunkt kommt wo Sie nicht mehr wissen, welche Methode Sie in welchem Trait versenkt haben.
require encode_stash;
2018-11-07T08:19:36 Muffihaben zur klassischen Vererbung einen entscheidenden Nachteil.
Sie können inkompatibel zueinander sein.
1
2
3
4
5
6
7
8
package MyChild;
use lib '.';
use base ( 'Foo', 'Bar' );
sub new { bless {}, shift }
1;
1
2
3
4
$ perl -I. -MMyChild -E 'MyChild->new->test;'
Due to a method name conflict between roles 'Bar and Foo', the method 'test' must be implemented by 'MyChild' at /usr/share/perl5/Moo/Role.pm line 280.
Compilation failed in require.
BEGIN failed--compilation aborted.
1
2
3
4
5
6
7
8
9
10
11
package MyChild;
use warnings;
use lib '.';
use Foo;
use Bar;
sub new { bless {}, shift }
1;
1
2
3
$ perl -I. -MMyChild -Mstrict -wE 'MyChild->new->test'
Subroutine test redefined at Bar.pm line 4.
Bar.pm
2018-11-09T07:35:51 Muffi[EDIT] Bin grad am Überlegen. Selbst mit Mehrfachvererbung sollt in der Regel nichts passieren.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Foo:
def test(self):
print "Foo";
class Bar:
def test(self):
print "Bar";
class MyChild(Bar, Foo):
def __init__(self):
print "init"
c = MyChild();
c.test();
QuoteWarum auch sollte man sämtliche Methoden einer fremden Klasse erben wenn man nur eine Methode braucht!?
2018-11-09T09:37:04 rostiD.h., OOP ist nur eine andere Art und Weise seinen CODE zu organisieren, so sehe ich das.
2018-11-09T09:31:06 Muffi[EDIT] Ich seh das immer wieder, dass alles OO sein muss. Nein, muss es nicht. Es gibt nichts gekapselteres und nichts einfacheres als eine Funktion.
Es ist auch nicht ganz grundlos, dass Linus Torvalds sich komplett gegen OO ausspricht.
QuoteInstanzen machen nur dann einen Sinn, wenn deren Methoden genutzt werden und es einen Grund gibt, diese Methoden in einem eigenen Namensraum bzw. einer eigenen Klasse zu definieren.
1 2 3 4 5 6 7 8 9
print eval{ # werfe Exception der Klasse 'exa' $m->throw('exa',"Invalid!"); 99; } || do{ # catch instance for class 'exa' my $exa = $m->caught('exa'); $exa->error, $exa->trace; };
timeout(20000, ExcelÖffnen);
1
2
3
4
5
6
7
8
9
10
11
try
timeout(20000, ExcelÖffnen);
except
on E ETimeoutException
begin
E.Message := 'Excel reagiert nicht mehr';
raise;
end;
on E Exception
raise;
end;
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
# Trait for Handle Excepions via virtuell Exception Classes use strict; use warnings; use Devel::StackTrace; # FW Methode sub throw{ my $self = shift; my $class = shift; my $msg = shift; eval{ die "$msg\n" }; chomp $@; $self->{exceptions}{$class} = { error => $@, trace => Devel::StackTrace->new }; die "$msg\n"; } # FW Methode sub caught{ my $self = shift; my $class = shift; bless $self->{exceptions}{$class}, __PACKAGE__; } # EX Methode sub error{ my $self = shift; $self->{error}; } # EX Methode sub trace{ my $self = shift; $self->{trace}->as_string; } 1;
1 2 3 4 5 6 7 8 9 10 11 12
use throw; # Trait $, = "\n"; my $main = bless{}; try{ $main->throw('MyExClass',"Invalid!"); } catch{ my $exa = $main->caught('MyExClass'); print $exa->error, $exa->trace; };
2018-11-16T08:27:32 rostiDie Idee die dahinter steckt ist, Exceptions zu klassifizieren. Ob das Sinn macht oder nicht, da bin ich grad dabei das herauszufinden.