gpt4 book ai didi

scala - 为什么这些代码行会卡住 Scala/SBT 构建?

转载 作者:行者123 更新时间:2023-12-01 06:31:34 28 4
gpt4 key购买 nike

从 Play Framework 2.1 过渡到 2.2 (Scala) 我正在重构一些代码,发现一些代码行完全卡住了 SBT 构建,直到该进程因 java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded 而被终止。 . Eclipse(尝试使用 Juno 和 Kepler,但我怀疑它与此有关)也卡住了,它甚至不再加载工作台。

所以,这是代码。我很想知道是什么让编译器卡住,而不仅仅是在这里给出错误。

def foo = Action { implicit request =>
someForm.bindFromRequest.fold(
formWithErrors => Ok,
form => Async { Future.successful(Ok) }
)
}

我已经解决了这个问题,但我很好奇为什么这会卡住一切。我在运行 java (1.7.0_40) 的 Mac 上。

更新:另外,我使用的是 Scala 2.10.2。我的一个同事可以在他的 PC 上编译这个,但在 Async 上有弃用警告。

最佳答案

Scala 中有某些表达式,当您要求编译器评估它们时,它会实例化 TON 类型实例,试图找出两种类型之间的统一差异。最有可能的是,您返回的类型不是您所期望的。

我会明确注释结果类型:

def foo = Action { implicit request =>
someForm.bindFromRequest.fold[Result](
formWithErrors => Ok,
form => Async { Future.successful(Ok) }
)
}

这应该有助于类型推断器知道类型是什么,并且只检查它们是否匹配,而不是无限扩展。此外,听起来它可能是一个 Scala 编译器错误。

关于scala - 为什么这些代码行会卡住 Scala/SBT 构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19832784/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com