我已经看到了一些涉及臭名昭著的“22 个字段/参数”问题的其他问题,这是 Scala V here and here https://stackoverflow.com/questions/33494526/how-to-unlimit-spray-jsonformat。然而,根据这个博客文章 https://underscore.io/blog/posts/2016/10/11/twenty-two.html,看来 22 个参数限制在case class
已修复;至少在语言方面是如此。
我有一个case class
我想加载任意(读取:> 22)数量的值,稍后将使用 Play 库将其读入 JSON 对象。
它看起来像这样:
object L {
import play.api.libs.json.Reads. _
import play.api.libs.functional.syntax._
implicit val responseRead: Reads[L] = (
MyField1.jsPath.Read[MyField1.t] and
MyField2.jsPath.Read[MyField2.t] and
...
MyField35.jsPath.Read[MyField35.t]
) (L.apply _)
}
case class L(myField1: MyField1.t, myField2: MyField2.t, ... myField35: MyField35.t)
问题是在编译时,Scala 抱怨参数中有超过 22 个case class
。 (具体来说:在对象定义的最后一行,当编译器尝试构建时,我得到:“实现将函数限制为 22 个参数”。)我目前使用的是 Scala v2.11.6,所以我think这不是语言问题。这让我觉得 Play 库还没有更新他们的实现Read
.
如果是这样的话,那么我想最好的办法是将相关字段分组到元组中并通过 JSON API 传递元组?
正如您引用的博客文章中提到的,22 个参数的限制对于 Scala 2.11 及更高版本中的函数仍然有效,所以您遇到的情况is语言问题。本例中的函数调用是:
L.apply _
重构模型是解决此限制的一种方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)