scala中case类字段的最大数量是多少?

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

它曾经是22,我听说有人说它现在是512?那是对的吗?有人可以提供来源。

scala apache-spark
1个回答
3
投票

在Scala 2.11中有一个隐式限制,似乎如果你创建一个大约有100多个字段的case类,你会得到一个堆栈溢出(参见答案的底部)。

获得更高字段数(最多254个)的解决方法是

export SBT_OPTS="-XX:MaxPermSize=2G -Xmx2G -Xms2G -Xss8M"

如果你尝试任何高于254你得到

[error] /Users/sams/src/.../src/main/scala/com/MegaClass.scala:6:12: Platform restriction: a parameter list's length cannot exceed 254.
[error] case class MegaClass(

堆栈溢出错误:

[error] null
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transformSelect$1(SuperAccessors.scala:253)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:335)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:359)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:71)
...
[error] scala.reflect.internal.Trees$class.itransform(Trees.scala:1345)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
[error] scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
[error] scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
[error] scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.mayNeedProtectedAccessor$1(SuperAccessors.scala:186)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transformSelect$1(SuperAccessors.scala:332)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:335)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:359)
[error] scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:71)
[error] scala.reflect.internal.Trees$class.itransform(Trees.scala:1345)
[error]            
[error] java.lang.StackOverflowError
[error]     at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:178)
[error]     at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:359)
[error]     at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:71)
[error]     at scala.reflect.internal.Trees$class.itransform(Trees.scala:1345)
[error]     at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
[error]     at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
[error]     at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
© www.soinside.com 2019 - 2024. All rights reserved.