在Scala中,包中是否可以包含函数/方法{}?

时间:2019-09-20 06:27:45

标签: scala zio

我目前正在关注Wiem Zine小姐的文章(特别是有关ZIO的文章):Make your program testable

但是我无法通过

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's page,但这全都与范围界定有关。

I tried it in intellij, but it complains.

可以是

package object console {
...
}

而不是package console {}

还是scala 3东西?还是我做错了什么?

1 个答案:

答案 0 :(得分: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来获取通用的软件包代码。