Возможно ли в Scala иметь функции / методы внутри пакета {}?

В настоящее время я слежу за статьей мисс Вием Зайн (особенно о ZIO): Сделайте свою программу тестируемой.

но я не мог пройти

package console {
  def println(line: String): ZIO[Console, Nothing, Unit] =
    ZIO.accessM(_.console println line)

  val readLine: ZIO[Console, Nothing, String] = 
    ZIO.accessM(_.console.readLine)
}

Я читал на странице alvin alexander, но все дело в области охвата.

Пробовал в intellij, но жалуется.

Может ли это быть

package object console {
...
}

вместо того package console {}?

Или это Scala 3? Или я что-то не так делаю?

1 ответ

Решение

В Scala 2 у нас есть концепция объектов пакета. Здесь есть примеры: https://www.scala-lang.org/docu/files/packageobjects/packageobjects.html.

Я думаю, что отсутствует фрагмент кода из "статьи Wiem Zine" object ключевое слово, значит, вы правы, оно должно быть: package object console, поскольку весь пример находится на ZIO и Scala 2.x. Насколько я знаю, ZIO для Scala 3 пока нет:-)

@Thilo также прав в том, что Scala 3 позволяет нам использовать определения верхнего уровня прямо в файле без необходимости переносить их в блок. До Scala 3 можно было использоватьpackage object чтобы получить общий код пакета.

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