0

我目前正在关注 Wiem Zine 小姐的文章(特别是关于 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的东西?还是我做错了什么?

4

1 回答 1

1

在 Scala 2 中,我们有一个包对象的概念。这里有例子:https ://www.scala-lang.org/docu/files/packageobjects/packageobjects.html 。

我认为“Wiem Zine 的文章”中的代码片段缺少object关键字,所以你是对的,它应该是:package object console,因为整个示例都在 ZIO 和 Scala 2.x 上。据我所知,Scala 3 还没有 ZIO :-)

@Thilo 也是正确的,Scala 3 允许我们直接在文件中使用顶级定义,而无需包装成块。在 Scala 3 之前,可以使用package object来获取通用的包代码。

于 2019-09-21T13:09:55.480 回答