1

在“官方” 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 有点陌生,所以我不明白为什么 ammonite 会使用util与(对我而言)“官方”不同的util,所以如果有人能为此提供理由,我将不胜感激。

更具体地说,有什么办法util可以scala.util代替ammonite.util

4

1 回答 1

0

并不是说 Ammonite 正在util为普通的 Scala 替换一个不同的库,而是 Ammonite 命名空间有它自己的util包,其中包含大量特定于 Ammonite 的方法。如果开发人员为他的包选择一个不同的名称可能会更好,但这不是 Ammonite 特有的问题。这是你会一直遇到的事情。当命名空间发生冲突时,您唯一的选择是完全限定您想要的包名称。所以你实际上做的是一个很好的解决方案。您可以在此处找到更多相关信息。

顺便说一句,由于 Ammonite 包中没有 util.Random,您可以在导入后执行此操作——我测试过,这是从我的终端剪切和粘贴的:

@ Random.nextInt res1: Int = 1045964363

当您确实有方法名称冲突时,您可以在此处找到解决方案

于 2017-09-12T09:09:28.610 回答