[SCALA] 어떻게 22 개 필드의 스칼라 경우 클래스의 제한을 극복하기 위해?
SCALA어떻게 22 개 필드의 스칼라 경우 클래스의 제한을 극복하기 위해?
스칼라의 경우 클래스는 생성자 (22 개) 필드의 제한이 있습니다. 나는 케이스 클래스와 함께 작동 상속 또는 조성물과 그것을 할 수있는 방법이이 한도를 초과 할?
해결법
-
==============================
1.최근에 (육년 영업 후 년 10 월 2016), 리처드 Dallaway에서 블로그 게시물 "스칼라 22은"그 한계는 탐구 :
최근에 (육년 영업 후 년 10 월 2016), 리처드 Dallaway에서 블로그 게시물 "스칼라 22은"그 한계는 탐구 :
Case classes with > 22 parameters are now allowed.
즉, 여전히 경우 클래스 필드의 수에 제한이 존재 말했다에게, https://stackoverflow.com/a/55498135/1586965를 참조하십시오
import slick.driver.H2Driver.api._ import shapeless._ import slickless._ class LargeTable(tag: Tag) extends Table[Large](tag, "large") { def a = column[Int]("a") def b = column[Int]("b") def c = column[Int]("c") /* etc */ def u = column[Int]("u") def v = column[Int]("v") def w = column[Int]("w") def * = (a :: b :: c :: /* etc */ :: u :: v :: w :: HNil) .mappedWith(Generic[Large]) }
-
==============================
2.이 문제는 스칼라 2.11에서 수정 될 것입니다.
이 문제는 스칼라 2.11에서 수정 될 것입니다.
-
==============================
3.이 경우 클래스와 같은 역할을하는 일반 클래스를 구축 할 수 있습니다.
이 경우 클래스와 같은 역할을하는 일반 클래스를 구축 할 수 있습니다.
그 스파크가 지원하는 최신이며, 스파크-SQL에서 나는 경우 클래스를 많이 사용 무엇 때문에 나는 아직도 스칼라 2.10.X를 사용합니다.
22 개 이상의 필드가있는 경우 클래스에 대한 해결 방법 :
class Demo(val field1: String, val field2: Int, // .. and so on .. val field23: String) extends Product //For Spark it has to be Serializable with Serializable { def canEqual(that: Any) = that.isInstanceOf[Demo] def productArity = 23 // number of columns def productElement(idx: Int) = idx match { case 0 => field1 case 1 => field2 // .. and so on .. case 22 => field23 } }
-
==============================
4.그것은 당신의 생성자를 흥미하면 해당로드입니다,하지만 당신은 자신의 경우 클래스에 관련된 값을 패키징 할 수 있습니다.
그것은 당신의 생성자를 흥미하면 해당로드입니다,하지만 당신은 자신의 경우 클래스에 관련된 값을 패키징 할 수 있습니다.
당신이있을 때 그래서
case class MyClass(street: String, city: String, state: String, zip: Integer)
이 작업을 수행 할 수 있습니다
case class MyClass(address: Address)
당신도 다른 옵션이 있습니다 :
업데이트 : 다른 사람이 언급 한 바와 같이,이 더 이상 스칼라 2.11의 출시 후 문제 없다 - 나는 용어를 사용하는 것을 주저 것이지만 "수정." 당신이 경우 그러나, 때로는 여전히 타사 스칼라 라이브러리에 표시, "22 잡아라".
-
==============================
5.당신은 많은 값을 가질 때, 일반적으로 설계 어쨌든 재 작업해야하는 기호입니다.
당신은 많은 값을 가질 때, 일반적으로 설계 어쨌든 재 작업해야하는 기호입니다.
간헐적 인 경우 클래스 다음으로 큰 응집체를 형성한다. 이것은 또한, 대한 이유를 이해하고 유지하기 위해 코드를 훨씬 쉬워집니다. 뿐만 아니라 당신이 겪고있는이 문제를 우회있다.
나는 사용자 데이터를 저장하기를 원한다면 예를 들어, 나는이 작업을 수행 할 수 있습니다 ....
case class User(name: Name, email: String) case class Name(first: String, last: String)
그래서 몇 가지로, 물론이 필요하지 않을 것입니다. 당신은 하나 개의 클래스에 벼락 공부하려고 22 일이있는 경우, 당신은 어쨌든 간헐적 인 경우 클래스 - 작업의 이런 종류의 작업을 수행 할 수 있습니다.
from https://stackoverflow.com/questions/20258417/how-to-get-around-the-scala-case-class-limit-of-22-fields by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스칼라에서 제네릭 형식에 패턴 일치에? (0) | 2019.11.03 |
---|---|
[SCALA] 나는 스칼라에 밀봉 부모로부터 파생 케이스의 모든 개체의 컴파일 시간 목록을받을 수 있습니까? (0) | 2019.11.03 |
[SCALA] 스칼라 : 어떻게 "일반적인"기능 매개 변수를 정의? (0) | 2019.11.03 |
[SCALA] _ * 스칼라의 의미 : 무슨 일이 PARAM은 무엇입니까? (0) | 2019.11.03 |
[SCALA] 스칼라에 대한 JVM 힙 크기를 증가? (0) | 2019.11.03 |