我正在将 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
,但问题仍然存在。
有什么提示吗?
通过更改此:
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 编译器中的一个错误。