【发布时间】:2021-04-23 18:39:12
【问题描述】:
我有一个 Scala 类,其中包含一个方法,该方法有 1000 个左右的 if-else 条件(没有简单的模式可以用来组合它,所有条件本质上都大不相同)。
val a = "some string"
if(a.contains("xx")){
"aa_xx"
}
else if(a.contains("yy")){
"121_Some random string"
}
... and so on about 1000's conditions
当尝试使用 maven 构建 jar 时,我收到了 StackOverflowError。 尝试使用 Maven 的自定义 xml 值构建,但仍然看到相同的错误。
[ERROR] error: java.lang.StackOverflowError
[INFO] at scala.reflect.internal.Types$$anonfun$47.apply(Types.scala:4579)
[INFO] at scala.reflect.internal.Types$$anonfun$47.apply(Types.scala:4579)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.isSubType1(TypeComparers.scala:319)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.isSubType(TypeComparers.scala:278)
[INFO] at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:16)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.retry$3(TypeComparers.scala:520)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.fourthTry$1(TypeComparers.scala:547)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.classOnRight$1(TypeComparers.scala:460)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.thirdTryRef$1(TypeComparers.scala:464)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.thirdTry$1(TypeComparers.scala:478)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.secondTry$1(TypeComparers.scala:450)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.firstTry$1(TypeComparers.scala:411)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.isSubType2(TypeComparers.scala:552)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.isSubType1(TypeComparers.scala:320)
[INFO] at scala.reflect.internal.tpe.TypeComparers$class.isSubType(TypeComparers.scala:278)
关于如何修复它的任何建议?
【问题讨论】:
-
您是否尝试过使用
-Xss增加堆栈大小? -
@HaraldGliebe 我在哪里可以配置它?
-
MAVEN_OPTS="-Xss10m" mvn package -
如果您的源代码重复性足以使编译器崩溃,那么也许可以改进您的代码。我不能正确地相信这段代码不能以更理智的方式编写。谁会认真维护一个包含数千个检查的文件,而这本应该是一张简单的地图?
-
我只是出于示例目的发布了其他逻辑条件,其中包含许多 AND 以及 OR 检查,有些没有 AND,因此无法使用 map,因此选择有很多 if -else,这是一种来自其他资源的数据聚合逻辑。