Kann "this" als impliziter Parameter in Scala übergeben werden?

8

Angenommen, ich möchte Code umbrechen, der Ausnahmen mit einem try-catch-Block auslösen kann, der die Ausnahme protokolliert und fortsetzt. Etwas wie:

%Vor%

Idealerweise würde ich gerne den Logger verwenden, der für das aufrufende Objekt definiert wurde, falls vorhanden (und falls nicht, einen Kompilierungsfehler erhalten). Ich würde gerne so etwas definieren:

%Vor%

wo objectWithLogger im Client-Code irgendwie "magisch" zu "this" expandiert. Ist das (oder eine ähnliche Sache) möglich?

    
Jean-Philippe Pellet 24.11.2010, 17:18
quelle

3 Antworten

11

Es kann tatsächlich so gemacht werden, wie Sie es wollen. Die anderen Beantworter ergaben sich zu schnell. Keine weißen Fahnen!

%Vor%     
extempore 24.11.2010, 20:35
quelle
4

Debilskis Antwort wird funktionieren, aber ich bin mir nicht sicher, ob ich einen guten Grund sehe, hier einen Strukturtyp (dh { def logger: Logger } ) zu verwenden. Dies führt zu einem zusätzlichen Laufzeitaufwand, wenn logger aufgerufen wird, da die Implementierung von Strukturtypen auf Reflektion beruht. Die loggingExceptions -Methode ist eng mit der Protokollierung verbunden, also würde ich sie einfach Teil eines Logging-Merkmals machen:

%Vor%     
Aaron Novstrup 24.11.2010 19:35
quelle
3

Sie könnten allen Klassen, die def loggingExceptions verwenden möchten, ein Merkmal hinzufügen und in diesem Merkmal einen Selbsttyp hinzufügen, der erwartet, dass def logger: Logger verfügbar ist.

%Vor%     
Debilski 24.11.2010 17:24
quelle

Tags und Links