Wie verwende ich Bibliotheken von Drittanbietern mit Scala REPL?

72

Ich habe Algebird heruntergeladen und möchte mit dieser Bibliothek einige Dinge im Scala-Interpreter ausprobieren . Wie erreiche ich das?

Harshal Kshatriya
quelle
1
Normalerweise gibt es auch einen :cpBefehl von der REPL-Eingabeaufforderung, der jedoch fehlerhaft ist. es kann in 2.11 zurückkehren.
Som-Snytt

Antworten:

109

Natürlich können Sie scala -cp verwenden und Ihre Abhängigkeiten manuell verwalten. Dies wird jedoch ziemlich mühsam, insbesondere wenn Sie mehrere Abhängigkeiten haben.

Ein flexiblerer Ansatz besteht darin, sbt zum Verwalten Ihrer Abhängigkeiten zu verwenden. Suchen Sie auf search.maven.org nach der Bibliothek, die Sie verwenden möchten . Algebird zum Beispiel ist verfügbar, indem Sie einfach nach Algebird suchen . Erstellen Sie dann eine build.sbt, die auf diese Bibliothek verweist, geben Sie das Verzeichnis ein und geben Sie die sbt-Konsole ein . Es werden alle Ihre Abhängigkeiten heruntergeladen und eine Scala-Konsolensitzung mit allen Abhängigkeiten automatisch im Klassenpfad gestartet.

Das Ändern von Dingen wie der Scala-Version oder der Bibliotheksversion ist nur eine einfache Änderung in der Datei build.sbt. Zum Herumspielen benötigen Sie keinen Scala-Code in Ihrem Verzeichnis. Ein leeres Verzeichnis mit nur der Datei build.sbt reicht völlig aus.

Hier ist eine build.sbt für die Verwendung von algebird:

name := "Scala Playground"

version := "1.0"

scalaVersion := "2.10.2"

libraryDependencies += "com.twitter" % "algebird-core" % "0.2.0"

Bearbeiten: Wenn Sie mit einer Bibliothek herumspielen möchten, müssen Sie häufig zuerst die Namespace (s) der Bibliothek importieren. Dies kann auch in der Datei build.sbt automatisiert werden, indem die folgende Zeile hinzugefügt wird:

initialCommands in console += "import com.twitter.algebird._"
Rüdiger Klaehn
quelle
1
Danke, das ist wirklich hilfreich.
Harshal Kshatriya
7
SBT kann sich auch um viele andere Dinge kümmern, z. B. das Herunterladen anderer Abhängigkeiten in der Bibliothek, das Auswählen der richtigen Version in Abhängigkeit von Ihrem ScalaVersion-Wert, und es kann sogar "on the fly" zwischen Scala-Versionen wechseln, indem Sie z sbt prompt set scalaVersion := "2.9.0-1". Ich empfehle dringend, SBT zu verwenden, um mit neuen Bibliotheken zu experimentieren.
Giorgos Keramidas
1
Vielen Dank dafür. Als neue Person bei Scala (die aus Rubin stammt und ein wunderbares Edelsteinsystem ist) war dies eine große Frustration für mich. Die Klarheit, die Sie angeboten haben, wird sehr geschätzt.
Joseph Sawyer
3
Erstellen Sie ein Verzeichnis, das nur die Datei build.sbt enthält. Starten Sie dann sbt consolevon diesem Verzeichnis aus.
Rüdiger Klaehn
1
Ich empfehle Ihnen dringend, auch andere sbt (Konsolen) -Funktionen zu überprüfen. Beispielsweise ist es sehr nützlich, kontinuierlich mit ausgelösten Ausführungen kompilieren und testen zu können. scala-sbt.org/0.13/docs/index.html
noego
14

Beim Ausführen sbt consolewerden keine Bibliotheken importiert, die mit einem Testbereich deklariert wurden. Starten Sie die Konsole mit, um diese Bibliotheken in REPL zu verwenden

sbt test:consoleQuick

Sie sollten sich jedoch bewusst sein, dass beim Starten der Konsole das Kompilieren Ihrer Testquellen übersprungen wird.

Quelle: http://www.scala-sbt.org/0.13/docs/Howto-Scala.html

Zoltán
quelle
@Zoltan: Woher weiß sbt, was sich im Testumfang befindet und was nicht? Mein sbt enthält nur libraryDependencies ++= Seq("org.scalatest" %% "scalatest" % "3.0.5" % "test", "org.scalacheck" %% "scalacheck" % "1.14.0" % "test"). Und hier gibt es kein "Test Scoping".
Ashwin
@Ashwin das % "test"am Ende dieser Zeile ist genau das, was SBT sagt, dass diese Abhängigkeit nur für Tests gilt. Wenn Sie es weglassen, wird es zu einer Kompilierungsabhängigkeit.
Zoltán
6

Sie können den -cpSchalter der Scala verwenden , um Gläser auf dem Klassenpfad zu halten. Es gibt auch andere Schalter auch zur Verfügung, zum Beispiel, -deprecationund -uncheckedauf verschiedene Warnungen für das Drehen. Viele weitere mit scala -X...und zu finden scala -Y.... Weitere Informationen zu diesen Schaltern finden Sie mitscala -help

SRI
quelle
2

Dies ist eine Antwort mit Ammonite (im Gegensatz zur Scala REPL) - aber es ist ein so großartiges Werkzeug, dass es erwähnenswert ist.

  1. Sie können es mit einem Einzeiler installieren, wie z.
sudo sh -c '(echo "#!/usr/bin/env sh" && curl -L https://github.com/lihaoyi/Ammonite/releases/download/2.1.2/2.13-2.1.2) > /usr/local/bin/amm && chmod +x /usr/local/bin/amm' && amm

oder mit Brew unter MacOS:

brew install ammonite-repl  

Für Scala 2.10 müssen Sie eine oder Version 1.0.3 verwenden:

sudo sh -c '(echo "#!/usr/bin/env sh" && curl -L https://github.com/lihaoyi/Ammonite/releases/download/1.0.3/2.10-1.0.3) > /usr/local/bin/amm && chmod +x /usr/local/bin/amm' && amm
  1. Führen Sie Ammonite in Ihrem Terminal aus:
amm
// Displays
Loading...
Welcome to the Ammonite Repl 2.1.0 (Scala 2.12.11 Java 1.8.0_242)
  1. Verwenden Sie beim Efeuimport, um Ihre 3. Teilbibliothek zu importieren:
import $ivy.`com.twitter::algebird-core:0.2.0`

Dann können Sie Ihre Bibliothek innerhalb der Ammonite-REPL verwenden:

import com.twitter.algebird._
import com.twitter.algebird.Operators._
Map(1 -> Max(2)) + Map(1 -> Max(3)) + Map(2 -> Max(4))
...
Valy Dia
quelle