如何将包导入到Scala REPL中?

5

如何将一个包导入到Scala的REPL中? 我正在尝试导入一个叫做funsets的包,其中包含一个名为“FunSets”的对象。 我尝试了几种不同的方式,如import funsets._import funsets._;等,但仍然无法导入该包中的函数和对象。


什么是funsets?它在一个jar包里吗?它是一个已编译的类文件吗?它是一个scala文件吗?它是一个像maven central这样的外部存储库中的托管依赖项吗? - Dylan Nissley
funsets是一个包的名称,其中包含一个叫做FunSets的对象。它只是一个Scala对象文件。 - Linkx_lair
1
你需要从 sbt shell 中运行 console。然后,sbt 将编译 funsets 中定义的任何内容,并自动将其添加到 Scala shell 中。从那里,你就可以执行 import funsets._ - Jorge Vicente Cantero
3个回答

6

一种方法是编译“scala类”并将其放入classpath中。

例如,

1)假设你有一个类funsets.FunSets.scala

package funsets                                                                                        

object FunSets {                                                                                       

  def fun = "very fun"                                                                                 

}      

2) 首先使用scalac编译类。(如果您使用的是sbt,那么sbt compile会将编译后的类放入target/文件夹中)

scalac FunSets.scala

你会看到创建了funsets文件夹/包,
$ ls -l
total 16
-rw-r--r--  1 updupd  NA\Domain Users   63 Dec 18 11:05 FunSets.scala
drwxr-xr-x  4 updupd  NA\Domain Users  136 Dec 18 11:06 funsets

3) 然后在类路径中使用funsets包启动REPL

$ scala -classpath .
Welcome to Scala 2.12.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151).
Type in expressions for evaluation. Or try :help.

scala> import funsets._
import funsets._

注意:如果您使用“sbt compile”,请将“target/classes”放入类路径中。
访问Funsets单例,
scala> FunSets.fun
res0: String = very fun

也可以阅读Scala REPL无法导入包


3

启动repl时,您需要使用-cp<jar文件>参数将适当的jar文件添加到类路径中。或者,您可以在启动会话后使用:require <jar文件>指令加载一个jar文件。


2

假设您在一个Scala文件中有一些代码,您可以使用:load命令从Scala REPL加载外部Scala文件。更多信息请参见此答案


在 REPL 中,我尝试过执行 :load "C:...完整文件路径名" 和其他各种变化。我甚至尝试了执行 :paste "完整文件路径名"。 但它一直报“usage: :load -v 文件”或“usage: :paste -raw 文件”的错误。 - Linkx_lair
1
如果您在与文件相同的目录中启动repl,则应该能够只需执行:load myFile.scala - Dylan Nissley
1
根据这个答案,即使在Windows上应该具有相同的行为,您可能需要使用:lo命令而不是:load - Dylan Nissley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接