在“官方”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
?
答案 0 :(得分:0)
不是Ammonite正在为普通的Scala替换不同的util
库,而是Ammonite命名空间拥有它自己的util
包,它有一大堆特定于Ammonite的方法。如果开发人员为他的包装选择了不同的名称,也许会更好,但这不是特定于Ammonite的问题。这是你会遇到的事情。当命名空间发生冲突时,您唯一的选择是完全限定所需的包名称。所以你实际做的是一个很好的解决方案。您可以找到有关此here的更多信息。
顺便说一句,因为Ammonite软件包中没有util.Random,你可以在导入后执行此操作 - 我测试过,这是我终端的剪切和粘贴:
@ Random.nextInt
res1: Int = 1045964363
当您确实发生方法名称冲突时,您可以找到解决方案here