如何使用scala的ammonite使用scala.util而不是ammonite.util作为util的默认值?

时间:2017-09-08 11:05:06

标签: ammonite

在“官方”scala REPL我能做到

scala> import util.Random
scala> util.Random.nextInt
res0: Int => -306696783

但是在Ammonite-REPL中我得到了

@ import util.Random
cmd3.sc:1: object Random is not a member of pack ammonite.util
import util.Random
       ^
Compilation Failed

所以现在我必须使用scala.前缀才能在Ammonite中使用它:

@ import scala.util.Random
@ scala.util.Random.nextInt
res1: Int = 503117434

我对Scala有点新意,所以我不明白为什么菊石会使用与(对我来说)“官方”util不同的util,所以如果有人可以,我会很感激提供理由。

更具体地说,有没有办法让util成为scala.util而不是ammonite.util

1 个答案:

答案 0 :(得分:0)

不是Ammonite正在为普通的Scala替换不同的util库,而是Ammonite命名空间拥有它自己的util包,它有一大堆特定于Ammonite的方法。如果开发人员为他的包装选择了不同的名称,也许会更好,但这不是特定于Ammonite的问题。这是你会遇到的事情。当命名空间发生冲突时,您唯一的选择是完全限定所需的包名称。所以你实际做的是一个很好的解决方案。您可以找到有关此here的更多信息。

顺便说一句,因为Ammonite软件包中没有util.Random,你可以在导入后执行此操作 - 我测试过,这是我终端的剪切和粘贴:

@ Random.nextInt res1: Int = 1045964363

当您确实发生方法名称冲突时,您可以找到解决方案here