2017-10-03 19 views
1

Scala V < 2.11의 고유 한 버그 (기능?) 인 악명 높은 "22 개 필드/매개 변수"문제와 관련된 몇 가지 다른 문제를 보았습니다. herehere을 참조하십시오. 그러나이 blog post에 따라 case class의 22 매개 변수 제한이 수정 된 것 같습니다. 적어도 언어가 관련된 곳.22 개 이상의 매개 변수가있는 Play Framework 및 사례 클래스 사용

Play 라이브러리를 사용하여 나중에 JSON 객체로 읽어 들이게 될 임의의 (읽기 :> 22) 값을로드하려는 case class이 있습니다.

그것은이 같은 같습니다

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) 

문제는 컴파일에 즉을, 스칼라는 case class에서 22 개 이상의 매개 변수가 있음을 뿌려줍니다. (구체적으로 : 객체 정의의 마지막 줄에서 컴파일러가 빌드를 시도 할 때 "구현은 22 개 매개 변수로 함수를 제한합니다.") 현재 스칼라 v2.11.6을 사용하고 있으므로 으로 생각하지 않습니다. 언어 문제. Play 라이브러리가 Read의 구현을 업데이트하지 않았다고 생각합니다.

그럴 경우 관련 필드를 튜플에 그룹화하고 튜플을 JSON API를 통해 전달하는 것이 가장 좋습니다.

답변

1

참조한 블로그 게시물에서 언급했듯이 스칼라 2.11 이상에서는 22 파라미터 제한이 여전히 적용되므로 은 언어 문제가입니다. 이 경우 함수 호출은 다음과 같습니다.

L.apply _ 

모델을 재구성하면이 제한을 처리하는 한 가지 방법입니다.