Ich möchte eine Funktion definieren, die * 2
auf ihr Argument anwendet, das für alle Typen funktioniert, bei denen es sinnvoll ist. Ich habe versucht, Strukturtypen zu verwenden:
Es funktioniert für Strings:
%Vor%Aber nicht für Zahlen:
%Vor%Bearbeiten : Mit "tun, was ich will" meine ich, dass ich für bereits existierende Typen wie Zahlen und Strings arbeite, nicht nur für Klassen, die ich selbst definiere.
*
wird in $times
übersetzt, der Strukturtyp prüft das Vorhandensein von *
method, aber (ich nehme an, das ist ein Fehler) ruft es interne ( $times
) Darstellungen auf. Das funktioniert für String
, weil für sie $times
ist.
Dieser Ansatz sollte für Methoden mit Namen funktionieren, die nur Buchstaben enthalten.
'' '
%Vor%'' '
%Vor%Beachten Sie auch, dass die strukturelle Typisierung reflection = & gt; ist ziemlich langsam.
Eine weitere Möglichkeit, die ich gefunden habe, ist die Verwendung von Makros. Ab Scala 2.11.8 sind sie noch experimentell und, so Martin Odersky, werden in dieser Form nicht überleben . Das aktuelle Synax ist ungeschickt, aber bis jetzt ist es die einzige Methode, die vollständig DRY ist ( * 2
wird nur einmal geschrieben, und die Funktion funktioniert bei allen Typen, die diese Operation unterstützen).
Unabhängig davon, ob dies die beste Lösung ist, poste ich es aus Gründen der Vollständigkeit:
%Vor%