我已经下载了Algebird,并且想使用此库在Scala解释器中尝试一些操作。我该如何实现?
Answers:
当然,无论如何都可以使用scala -cp并手动管理依赖项。但这变得非常乏味,尤其是在您具有多个依赖项的情况下。
一种更灵活的方法是使用sbt管理您的依赖项。在search.maven.org上搜索要使用的库。例如,只需搜索algebird即可使用Algebird。然后创建引用该库的build.sbt,输入目录并输入sbt console。它将下载您的所有依赖关系,并在类路径上自动启动具有所有依赖关系的scala控制台会话。
更改诸如scala版本或库版本之类的内容只是build.sbt中的一个简单更改。要玩游戏,您的目录中不需要任何Scala代码。仅包含build.sbt的空目录就可以了。
这里是一个build.sbt使用algebird:
name := "Scala Playground"
version := "1.0"
scalaVersion := "2.10.2"
libraryDependencies += "com.twitter" % "algebird-core" % "0.2.0"
编辑:通常,当您想使用一个库时,要做的第一件事就是导入库的名称空间。通过添加以下行,也可以在build.sbt中将其自动化:
initialCommands in console += "import com.twitter.algebird._"
set scalaVersion := "2.9.0-1"
。我强烈建议使用SBT尝试新的库。
sbt console
从该目录启动。
运行sbt console
将不会导入使用测试范围声明的库。要在REPL中使用这些库,请使用以下命令启动控制台
sbt test:consoleQuick
但是,您应该知道,以这种方式启动控制台会跳过编译测试源的过程。
libraryDependencies ++= Seq("org.scalatest" %% "scalatest" % "3.0.5" % "test", "org.scalacheck" %% "scalacheck" % "1.14.0" % "test")
。而且这里没有“测试范围”。
% "test"
该行末尾的@Ashwin正是告诉SBT,此依赖性仅用于测试。如果不考虑它,它将成为编译依赖项。
这是使用Ammonite(与Scala REPL相对)的答案-但这是一个很棒的工具,值得一提。
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
或在macOS上使用brew:
brew install ammonite-repl
对于scala 2.10,您需要使用oder版本1.0.3:
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
amm
// Displays
Loading...
Welcome to the Ammonite Repl 2.1.0 (Scala 2.12.11 Java 1.8.0_242)
import $ivy.`com.twitter::algebird-core:0.2.0`
然后,您可以在Ammonite-REPL中使用您的库:
import com.twitter.algebird._
import com.twitter.algebird.Operators._
Map(1 -> Max(2)) + Map(1 -> Max(3)) + Map(2 -> Max(4))
...
:cp
REPL提示符中也有一条命令,但该命令已被破坏;它可能会在2.11中返回。