【问题标题】:What is the practical maximum number of fields allowed in a Scala case class now that 22 is no longer the limit?现在 22 不再是限制,Scala 案例类中允许的实际最大字段数是多少?
【发布时间】:2018-09-13 20:16:39
【问题描述】:

我有一个项目正在生成编译时堆栈溢出错误。

我正在使用 Quill 进行持久性,它使用宏。我有一个包含 600 多个字段的案例类,代表一个数据库表。

在编译期间,我得到以下无限递归:

ervice.scala:27​​: UPDATE email_user SET password_hash = ?在哪里用户 ID = ? [info] .run(quote { [info] ^ java.lang.StackOverflowError at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:686) 在 scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:773) 在 scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5584) 在 scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5616) 在 scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5557) 在 scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5562) 在 scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$38(Typers.scala:4708) 在 scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:698) 在 scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4710) 在 scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4757) 在 scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5530) 在 scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5547) 在 scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:773) 在 scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5584)

即使案例字段数量的 22 个字段限制现在已经消失,我是否遇到了一些实际限制?

如果我没有使用 Quill 访问有问题的表/大案例类,则会出现此编译错误。

感谢您的任何见解!

【问题讨论】:

    标签: scala quill.io


    【解决方案1】:

    如果您想将其称为实际限制,您将遇到正在编译的 JVM 的最大堆栈大小。 如果要编译嵌套异常深的代码或使用异常大的案例类,则必须增加 JVM 的堆栈大小被认为是正常的。通过将参数 -Xss6m 传递给 JVM,您可以将最大堆栈大小设置为 6MB。您可以尝试增加该数字,直到它起作用为止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-28
      • 2014-06-27
      • 2023-03-13
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多