Как сделать так, чтобы аммонит в scala использовал scala.util вместо ammonite.util по умолчанию для util?

В "официальном" скале 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. префикс, чтобы заставить это работать в Аммоните:

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

Я немного новичок в Scala, так что я не понимаю, зачем аммониту использовать другой util чем (для меня) "официальный" util, поэтому я был бы признателен, если кто-нибудь может предоставить обоснование для этого.

А конкретнее, есть ли способ сделать util быть scala.util вместо ammonite.util?

1 ответ

Это не значит, что аммонит заменяет другой util библиотека для обычного Scala, это то, что пространство имен Ammonite имеет свой собственный util пакет, в котором есть целый ряд методов, характерных для аммонита. Возможно, было бы лучше, если бы разработчик выбрал другое название для своего пакета, но это не проблема, специфичная для Ammonite. Это то, с чем вы столкнетесь все время. Когда происходит столкновение пространств имен, единственный вариант - полностью указать имя пакета для того, которое вам нужно. Итак, что вы на самом деле сделали, это прекрасное решение. Вы можете найти больше об этом здесь.

И между прочим, так как утилита отсутствует. Случайно в пакете Ammonite вы можете сделать это после импорта - я проверил, и это вырезка и вставка из моего терминала:

@ Random.nextInt res1: Int = 1045964363

Когда у вас действительно есть столкновение имен методов, вы можете найти решение здесь

Другие вопросы по тегам