使用SBT编译时的递归限制

问题描述 投票:0回答:1

我正在将 Scala 2.13.14 代码迁移到 Scala 3.3.3。 曾经在 Scala 2 中编译正常的 Whem 文件提供了以下错误消息:

Recursion limit exceeded.
Maybe there is an illegal cyclic reference?
If that's not the case, you could also try to increase the stacksize using the -Xss JVM option.
For the unprocessed stack trace, compile with -Yno-decode-stacktraces.
A recurring operation is (inner to outer):

  subtype String & K <:< Nothing
  subtype String & K <:< Nothing
  subtype String <:< scala.collection.Map[? >: String & K <: String | K, String]#K
  subtype String | K <:< scala.collection.Map[? >: String & K <: String | K, String]#K
  subtype (String | K, String) <:< (scala.collection.Map[? >: String & K <: String | K, String]#K, String)
  subtype ((scala.collection.Map[? >: String & K <: String | K, String]#K, String)) => (
  K2, V2) <:< ((String | K, String)) => B
        .map { v =>

也许可以通过一些

scalacOptions
来解决。 这是一个非常简单的源文件,仅包含:

object EstadoPoolsDB extends Logging {
   ....
}

trait EstadoPoolsDBInfoMBean {
  def getStatus: String
}

class EstadoPoolsDBInfo extends EstadoPoolsDBInfoMBean {

  override def getStatus: String = {
    val status = EstadoPoolsDB.status
    JsonWeb.toJsonString(status, Traducciones.traduccionesPorDefecto, false).toOption.getOrElse(status.toString())
  }
}

令人惊讶的是,我有许多其他源文件没有显示这个问题,即使它们更复杂。

当前 scalac 选项:

    scalacOptions := Seq(
        "-deprecation",
        "-explain",
        "-feature",
        "-language:higherKinds",
    )

我正在使用 Java 21。 默认的ThreadStackSize是1024。 我通过运行获得了这个值:

java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

我已将

-JXss2048
添加到
scalacOptions
,但问题仍然存在。

有什么提示吗?

scala migration scala-3
1个回答
0
投票

通过更改此:

  implicit class ConnectionPoolOps(pool: ConnectionPool){
    def getPoolName(): String = Option(pool).map(_.getName).getOrElse("<null>")
  }

  implicit class ConexionAbiertaOps(conn: ConexionAbierta){
    def poolName(): String = conn.pool.getPoolName()
  }

至:

  extension (pool: ConnectionPool)
    def getPoolName(): String = Option(pool).map(_.getName).getOrElse("<null>")

  extension (con: ConexionAbierta)
    def poolName(): String = con.pool.getPoolName()

编译没问题。 我认为这是 Scala 编译器中的一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.