如何在Scala REPL中使用第三方库?
我已经下载了Algebird,我想使用这个库在Scala解释器中尝试一些东西。我如何做到这一点 您可以使用scala的如何在Scala REPL中使用第三方库?,scala,interpreter,read-eval-print-loop,Scala,Interpreter,Read Eval Print Loop,我已经下载了Algebird,我想使用这个库在Scala解释器中尝试一些东西。我如何做到这一点 您可以使用scala的-cp开关将JAR保持在类路径上。还有其他可用的开关,例如,-deprecation和-unchecked用于打开各种警告。通过scala-X..和scala-Y..可以找到更多。您可以使用scala-help查找有关这些交换机的更多信息当然,您可以使用scala-cp,并手动管理依赖项。但这会变得相当乏味,尤其是当您有多个依赖项时 一种更灵活的方法是使用它来管理依赖关系。搜索要
-cp
开关将JAR保持在类路径上。还有其他可用的开关,例如,-deprecation
和-unchecked
用于打开各种警告。通过scala-X..
和scala-Y..
可以找到更多。您可以使用scala-help查找有关这些交换机的更多信息当然,您可以使用scala-cp,并手动管理依赖项。但这会变得相当乏味,尤其是当您有多个依赖项时
一种更灵活的方法是使用它来管理依赖关系。搜索要在其上使用的库。例如,Algebird可以通过简单的方式获得。然后创建一个build.sbt引用该库,输入目录并输入sbt console。它将下载您的所有依赖项,并在类路径上自动启动包含所有依赖项的scala控制台会话
更改scala版本或库版本只是build.sbt中的一个简单更改。要玩游戏,目录中不需要任何scala代码。一个只有build.sbt的空目录就可以了
以下是使用algebird的build.sbt:
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._"
运行
sbt控制台
将不会导入使用测试范围声明的库。要在REPL中使用这些库,请使用启动控制台
sbt test:consoleQuick
但是,您应该注意,以这种方式启动控制台会跳过编译测试源代码
来源:这是一个使用(与Scala REPL相反)的答案,但它是一个非常好的工具,值得一提
sudo sh-c'(echo“#!/usr/bin/env-sh”和&curl-Lhttps://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-Lhttps://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
import com.twitter.algebird._
import com.twitter.algebird.Operators._
Map(1 -> Max(2)) + Map(1 -> Max(3)) + Map(2 -> Max(4))
...
谢谢,这真的很有帮助。SBT还可以处理很多其他事情,例如下载库可能具有的其他依赖项,根据您的scalaVersion值选择正确的版本,甚至可以通过键入在SBT提示符下设置scalaVersion:=“2.9.0-1”在scala版本之间“即时”切换。我强烈推荐使用SBT来试验新的库。非常感谢。作为Scala的新人(来自ruby及其奇妙的gem系统),这让我非常沮丧。非常感谢您提供的清晰性。创建一个只包含build.sbt的目录。然后从该目录启动
sbt控制台
。我强烈建议您也检查其他sbt(控制台)功能,例如,能够连续编译和测试触发执行非常有用。通常,REPL提示符中还有一个:cp
命令,但该命令已被中断;它可能会在2.11中返回。@Zoltan:sbt如何知道什么在测试范围内,什么不在测试范围内?我的sbt只包含libraryDependencies++=Seq(“org.scalatest”%%“scalatest”%%“3.0.5”%”测试、“org.scalacheck”%%“scalacheck”%%“1.14.0”%”测试”)
。这里没有“测试作用域”。@Ashwin该行末尾的%“test”
正是告诉SBT此依赖项仅用于测试的。如果不使用它,它将成为编译依赖项。
import $ivy.`com.twitter::algebird-core:0.2.0`
import com.twitter.algebird._
import com.twitter.algebird.Operators._
Map(1 -> Max(2)) + Map(1 -> Max(3)) + Map(2 -> Max(4))
...