Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala REPL中使用第三方库?_Scala_Interpreter_Read Eval Print Loop - Fatal编程技术网

如何在Scala REPL中使用第三方库?

如何在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,并手动管理依赖项。但这会变得相当乏味,尤其是当您有多个依赖项时 一种更灵活的方法是使用它来管理依赖关系。搜索要

我已经下载了Algebird,我想使用这个库在Scala解释器中尝试一些东西。我如何做到这一点

您可以使用scala的
-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
    
  • 在终端中运行Ammonite:
  • 在ivy导入中使用以导入第三部分库:
  • 然后,您可以在Ammonite REPL中使用您的库:

    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))
    ...