Einfaches Verwenden der grundlegenden JDBC-Schnittstelle, um einige Daten mit Scala zu lesen. In F # (mit dem System.Data.SqlClient-Namespace) könnten wir so etwas tun, um eine unveränderbare Liste von der Datenbank zurückzugeben.
%Vor%In Scala erweist sich das als schwieriger, soweit ich weiß, gibt es kein "während" Verständnis wie F #. Effektiv möchte ich etwas in der Nähe von F # in Scala tun, ohne veränderbare Vars verwenden zu müssen - und sei es nur, weil sie hässlich aussehen und Codezeilen hinzufügen.
So etwas scheint in meinem Scala-Code jetzt üblich zu sein:
%Vor% Sie könnten eine implizite Klasse zusammen mit einer impliziten CanBuildFrom
verwenden. Dies verwendet einen veränderbaren Builder, aber nicht auf der Seite des Aufrufers:
wird wie folgt verwendet:
%Vor% Das für das Verständnis verwendet map
unter der Haube, also wenn Sie map
direkt bevorzugen:
was eine Sequenz erzeugt. Dank CanBuildFrom
können Sie auch andere Sammlungen erstellen, indem Sie einen Typ explizit angeben:
Wie funktioniert CanBuildFrom
? Der Scala-Compiler untersucht die Typen, die an diesem Ausdruck beteiligt sind: Es gibt den resultierenden Typ und den Typ, der von der von map aufgerufenen Funktion zurückgegeben wird. Basierend auf diesen Informationen stellt der Scala-Compiler implizit eine Factory bereit, mit der ein geeigneter Builder erstellt werden kann. Sie benötigen also nur eine Methode, um verschiedene Arten von Sammlungen zu erstellen.
Wenn Sie mehrere Werte zurückgeben möchten, geben Sie einfach ein Tupel zurück:
%Vor% und das Tupel kann verwendet werden, um direkt ein Map
zu erstellen:
Dies basiert auf der Idee, dass eine Ergebnismenge eine Liste von Zeilen ist und daher die Funktion map
darüber verfügbar sein sollte. Die implizite Klasse wird verwendet, um die map
-Methode implizit der zugrunde liegenden Ergebnismenge hinzuzufügen.
Tags und Links scala list-comprehension jdbc