在 Scala 中是否可以在包内包含 functions/methods{}?

Is it possible in Scala to have functions/methods inside a package{}?

我目前正在关注 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 的东西吗?还是我做错了什么?

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

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

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